STM32F103C8 Flash ile ilgili korumalar hakkında

Başlatan z, 19 Haziran 2014, 14:55:36

z

#15
DFU modunu kullanmadigim icin sormak istiyorum.

Cipin ilk 4KB alanina program attik. Flashin geri kalan kisimlari bos.

Bu cipin ilk 4KB alanina yazma korumasi koyduk.

Bu cipe en son okuma korumasi koyduk.

----------------------

Simdi bu cipin okuma korumasini kaldirirsam cip siliniyor.
Ote yandan okuma korumasi cipe jtag ile kod atmami da engelliyor.  (Keilde debug meniye gecerken kod atamiyorum.)

ST-LINK Utility de okuma korumasi var diye program atmiyor. Eger istersen okuma korumasini kaldirayim diyor ama bu kez de bos alana kod yerlestirecek olsam bile benim 4KB programi da siliyor.

----------------------

X-FI daha once sordum cevapladin ama anlamamis olabilirim.

Eger ilk 4K da program yukluyse, burasi yazma korumali ise, cip de okuma korumali ise  DFU ile yada Boot0 Boot1 girisleriyle farkli boot yaparak cipin bos alanlarina program yukleyebilirmiyiz?

Not: STM32F103C8 de Level 0, Level 1, Level 2 diye bir seviye yok. Kafami karistiran konu daha onceki cevaplarinda bu "level"lerden bahsetmen.

DFU kodlarini silip atayim kafam rahat etsin diye cok ugrastim ama bu kodlari ben silemedim. Bu kodlar ST'nin korumasi altinda yada ben silmeyi beceremedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

X-Fi

Hocam L serisi yeni üretim ve F1xx serileri daha eski üretimler olduğu için birbirinden farklı olabilir. F107 için bende öyle bir durum hatırlıyorum ama emin değilim.

Bu durumu siz şöyle kullanabilirsiniz;

İşlemciye ilk programı yükleyin kod koruması sektor koruması v.s. aktif olsun daha sonra özel bir komut ile bu ilk yazılım sayesinde kod korumasını yazılımdan devre dışı bırakın. Yerleşik Loader lardan istediğiniz birisiyle 2. kod blogu hafızaya yazılsın işlem bitip reset aldığında bu ilk program yine kod korumasını yazılımdan devreye soksun.

Bu senaryo ile olur gibi görünüyor. Yüklenen ikinci koduda kendi kodunuz olduğunu teyhit edip öyle başlatmalısınız çünkü ben o arada korumaları kaldıracak bir kod yazıp çipe yüklersem güvenlik kırılır.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Müh. müh.

Alıntı yapılan: X-Fi - 21 Haziran 2014, 14:18:33
Hocam L serisi yeni üretim ve F1xx serileri daha eski üretimler olduğu için birbirinden farklı olabilir. F107 için bende öyle bir durum hatırlıyorum ama emin değilim.

Bu durumu siz şöyle kullanabilirsiniz;

İşlemciye ilk programı yükleyin kod koruması sektor koruması v.s. aktif olsun daha sonra özel bir komut ile bu ilk yazılım sayesinde kod korumasını yazılımdan devre dışı bırakın. Yerleşik Loader lardan istediğiniz birisiyle 2. kod blogu hafızaya yazılsın işlem bitip reset aldığında bu ilk program yine kod korumasını yazılımdan devreye soksun.

Bu senaryo ile olur gibi görünüyor. Yüklenen ikinci koduda kendi kodunuz olduğunu teyhit edip öyle başlatmalısınız çünkü ben o arada korumaları kaldıracak bir kod yazıp çipe yüklersem güvenlik kırılır.

St kartı takıp, stdeki kod, chip e yüklenmesi için read protection kaldırıldığında, swd den yada jtag den bağlanıp, kodunu çalarım. Sonrada bootloader ın reset factorunden sonraki, read protection yapan kodu kaldırır, keyfime bakarım.

Bu tarz birşeyin internet üzerinde konuşulması, sisteme açık vermiş olmuyormu? Kartı alan adam, google da basit bir arama yapsa, bu bilgilere zaten ulaşacak ve sistemin nasıl çalıştığını anlayacak..
Destiny of white is dirtied. Destiny of black is found guilty...

X-Fi

Haklısın hocam öylesine yazmışım Level_2 olmadan bu iş olmayacak.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

z

#19
Geldiğim nokta itibariyle çipi korumalı hale getirdiğimde çipi JTAG üzerinden okuyamıyor ve herhangi bir yere casus kod gömemiyorum.

Buna karşılık korumalı çipte, yazma koruması koymadığım alanları  içerideki kendi yazılımım okuma korumasını kaldırmadan dilediği gibi değiştirebiliyor.

Bu durumda çipimi JTAG/SWD üzerinden gelebilecek saldırılara karşı koruduğumu düşünüyorum. (?)

Ancak;

Eğer ki System Memory üzerine ST'nin yerleştirmiş olduğu kodlar, sanmıyorum ama iletişim kanalları üzerinden korumaları kaldırmadan kod yerleştirmeye izin veriyorsa bunu engelleyecek hiç bir çözümüm yok. Bu alana yerleşmiş kodları da silemiyorum. Silebilseydim kafam çok rahat olacaktı. Zira bu durumda çip üzerindeki kodların her bir byte'ı bana ait olacaktı. Eğer okuma korumasınıı kaldırırsa zaten çip kodları kendiliğinden imha olduğundan bu bir güvenlik açığı oluşturmayacak.

Bugüne kadar STM32F103'ü JTAG/SWD haricinde DFU olarak hiç programlamadım.

1) DFU olarak hangi iletişim metodlarıyla program atılabiliyor?

2) Bunun için hazır PC programlarını nereden indirebilirim?

3) System Memory üzerine ST tarafından hazırlanmış programın açık kodları yayınlanmışmı?

Çipe sistem meory üzerinden kendim saldıracağım. Eğer çipde bir açık bulursam bunu internetten yayınlamaktan kaçınmam ve bu durumda projede kullandığım çipi daha güvenilir olanla değiştirmeden üretime geçmem.

Bu nedenle bu bilgileri bu forumda yada bir başka yerde tartışarak internette kolay ulaşılır olmasından hiç endişe etmiyorum.

DFU ile bulduğum henüz incelemediğim doküman: http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00167594.pdf


mesaj birleştirme:: 21 Haziran 2014, 15:00:10

Sisteme nasıl saldıracağımı da anlatayım.

Boş çipe bootloader kodlarımı attıktan sonra flashın çok büyük bir kısmı boş kalacak. Bu alana daha sonra güvenli şekilde uygulama programı yüklenecek.

Bu durumda atak yapacak kişi çipi okuyamıyorsa çipe DFU kodları ile kod yüklemeye çalışacaktır.

Sırayla başlar. 0. Page'e şu kodu yaz. Yazdınmı?

Hayır.

1. Page'e yaz. Yazdınmı?

Hayır.

....
....

n. Page'e az. Yazdınmı?

Eğer evet cevabını alırsa iş bitmiştir ve budurumda çipe güvenlikli uygulama kodu yerleştirilemez.

Zira çipe kod yazıldığında muhtemelen bu kod parçası da çalıştırılabilecek demektir.

Bu durumda çipte MPU ünitesi de olmadığından (olsa bile o bile belki bu aşamada çözüm olmaz) casus olarak yerleştirilen kod tüm flash alanını byte byte okuyup verileri uygun bir iletişim kanalı ile çipin dışına sızdıracak demektir.

Bu durumda bütün güvenlik system memorye ST'nin nasıl bir kod yerleştirdiğine bağlı.

Öte yandan ne yaparsak yapalım. Dokumante edilmemiş bir register adresine 0xZZZZ gibi bir veri yerleştirildiğinde tüm korumaların kabak gibi açılmayacağını asla bilemeyiz.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

X-Fi

Hocam aradığınız kütüpane linkde örnekleriyle beraber var Çipin içindeki DFU apisi ile birebir aynıdır belkide daha yeni versiyonudur.

https://github.com/wesen/stm32_usb_fs_device_lib
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

z

#21
Nihayet projemi bitirdim retuj asamasina gectim.
Bu calismadaki amac, bir donanim tasarlayip bu donanima sahip olanlarin herbirine ayri ayri yazilim satmanin yazilimsal alt yapisini olusturmakti.
Bu amacla da programlar kullanicilar arasinda rahatlikla paylasilabilsin, kopyalanabilsin fakat sinirsiz kullanim hakki elde edebilmek icin ucret odeme
zorunlulugu olsun fikrinden yola ciktim.

Gunumuzde PClerdeki ucretli yazilimlarin deneme surumleri kolayca kirilip full surum haline getirilebiliyor. Bunun da onune gecmek mumkun gorunmuyor.

Fakat bu sorunu MCUlarda cozdugumu dusunuyorum. Bu cozum, programinizi uzaktan guncelleme gibi bir secenegi elinizden de almiyor.

Kati kurallar

MCU, read protection korumali. Bunun anlami cip JTAG vs ile okunamaz.
Kullanici, kendisine verilen programlardan diledigini cipin kendisine yukletebilir.
Kullanicinin kendisi program yazip bunu cipe klasik yollarla yukleyemeye kalkarsa cipteki isletim sistemi kendiliginden silinir.
Kullanici, ucretli yazilimlarin kopyasina kolayca ulasabilir, cipe yukleyebilir ve 10 kez full surum kullanabilir.
Kullanici ucretsiz yazilimlari  cipe yukleyebilir ve sinirsiz olarak kullanabilir.

Sistemi kirmak icin asagidaki yontemler denenebilir.

1) Cipin kapagi acilip silikona muhale edilebilir.
2) ST firmasinin  acik biraktigi arka kapidan flasha girilebilir. (Bence kesinlikle vardir)
3) Hala incelemedigim DFU yazilimi.
4) Proje makinemden ZIOS yada kriptolama programimin calinmasi.

Cok istedigim ancak STM32F10X serisi ile yapilmasi imkansiz olan tek eksik bu cipe kullanicinin da kendi programlarini yazip yukleyebilme ozelligi idi.

Bu ozellik de ancak bu seri yerine en azindan STM32F30x serisi kullanilirsa yapilabilir gorunuyor.

Sifreleme algoritmalari, anahtar uzunluklari, program yapisi hakkinda verilecek ufak tefek bilgiler sistem icin zaafiyet olusturacagindan sistemin isleyisi hakkinda sorular olmamak kaydiyla konuyu tartismak istiyorum.

Iyi bir sey ortaya koydugumu dusunuyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com