Pemrogram komputer sering melafalkan mantra bahwa instruksi x86 benar-benar buram: Intel memberi tahu kami bahwa mereka sedang melakukan sesuatu, tetapi tidak ada harapan bahwa siapa pun dapat memverifikasi apa yang terjadi, jadi jika NSA menyuruh mereka untuk kembali ke RNG mereka, maka kita tidak bisa benar-benar lakukan apa saja.
Yah, saya percaya bahwa pemrogram komputer tidak bisa berbuat apa-apa tentang masalah ini. Tetapi bagaimana seorang insinyur listrik akan menyerangnya? Apakah ada teknik yang bisa digunakan insinyur listrik untuk memverifikasi bahwa rangkaian benar-benar melakukan operasi yang dijelaskan dalam spesifikasi, dan tidak ada operasi lain?
cpu
reverse-engineering
pengguna14717
sumber
sumber
Jawaban:
Makalah terbaik yang saya baca tentang masalah ini adalah "Stealthy Dopant-Level Hardware Trojans" (Becker et al) dari 2014.
Makalah ini menjelaskan bagaimana perubahan itu dibuat, bagaimana sangat sulit untuk mendeteksi dari memeriksa silikon, teknik untuk menyembunyikannya dari uji produksi, dan bagaimana hal itu dapat dilakukan untuk mengurangi keamanan perangkat keras crypto RNG atau untuk membocorkan informasi penting melalui saluran samping power-rail dari implementasi AES.
Saluran samping adalah bidang minat yang muncul. Intel telah diganggu oleh masalah yang berkaitan dengan eksekusi spekulatif yang membocorkan informasi dari memori yang bahkan tidak digunakan oleh program. Mungkinkah itu cacat desain yang disengaja? Hampir mustahil untuk diceritakan.
sumber
Apakah ada teknik yang bisa digunakan insinyur listrik untuk memverifikasi bahwa rangkaian benar-benar melakukan operasi yang dijelaskan dalam spesifikasi, dan tidak ada operasi lain?
Secara teori, ya, saya pikir ini mungkin. Namun, untuk CPU yang kompleks akan membutuhkan banyak waktu dan uang. Juga, jika Anda tidak sepenuhnya mengetahui dan memahami desain, Anda tidak akan dapat menilai apakah ada kegiatan yang "sah" atau tidak.
CPU adalah "hanya" sirkuit digital kompleks yang terdiri dari banyak sel logika.
Dimungkinkan untuk merekayasa balik chip dan merekonstruksi desain dengan mengamati koneksi logam. Mungkin ada banyak dari lapisan koneksi ini seperti hingga 8 lapisan atau lebih.
Anda akan membutuhkan para ahli di bidang ini untuk mengenali sel-sel logika dan kemudian mungkin beberapa perangkat lunak dapat mengetahui bagaimana mereka semua terhubung sehingga Anda dapat merekonstruksi netlist.
Setelah Anda memiliki netlist, Anda "tahu" desainnya. Itu tidak berarti Anda sekarang juga tahu cara kerjanya!
Bisa jadi fungsi tertentu mengaktifkan 2 bagian dari desain sementara Anda berpikir satu harus cukup sehingga Anda kemudian curiga beberapa aktivitas mencurigakan sedang terjadi. Namun, desain melakukan beberapa trik pintar yang tidak Anda ketahui untuk mempercepat operasi.
Tanpa mengetahui dan memahami desain, kesimpulan apa pun yang Anda buat mungkin masih salah. Hanya para insinyur yang mendesain CPU yang memiliki semua informasi desain dan memiliki peluang terbaik untuk dapat mengetahui atau menebak apa yang sebenarnya terjadi atau harus berjalan dalam CPU.
sumber
Tidak ada cara yang baik untuk menemukan pintu belakang, salah satu cara untuk menemukan pintu belakang perangkat keras adalah dengan menguji kombinasi atau instruksi tidak berdokumen. Berikut ini adalah pembicaraan yang baik tentang seseorang yang benar-benar melakukan ini dan melakukan audit pada perangkat keras x86 . Ini bisa dilakukan tanpa memecahkan chip. Satu masalah dengan intel (saya tidak yakin tentang chip lain) adalah ia sebenarnya memiliki prosesor dengan linux berjalan di atasnya sehingga ada juga perangkat lunak yang berjalan pada beberapa prosesor, dan Anda tidak memiliki akses ke yang seharusnya.
Ada beberapa cara untuk menguji menggunakan perangkat keras itu sendiri untuk menguji fungsionalitas. Karena x86 memiliki bagian yang tidak terdokumentasi dari set instruksinya, akan tidak biasa untuk memperkenalkan backdoors dalam instruksi normal karena ia akan memperkenalkan kemungkinan bug (seperti jika Anda memiliki pintu belakang dalam instruksi add atau mult), jadi tempat pertama untuk mencari akan ada dalam instruksi tidak berdokumen.
Jika Anda memang perlu menguji fungsionalitas instruksi reguler, Anda dapat menonton waktu yang diperlukan untuk menjalankan instruksi, perhatikan jumlah daya yang diperlukan untuk menjalankan instruksi untuk melihat apakah ada perbedaan dari apa yang Anda harapkan.
sumber
Satu-satunya cara adalah melucuti lapisan chip demi lapisan dan merekam setiap transistor dengan mikroskop elektron, dan kemudian memasukkannya ke dalam semacam program simulasi dan kemudian melihatnya berjalan.
Ini pada dasarnya adalah masalah Kotak Hitam di mana Anda mencoba dan merekonstruksi internal dari pengukuran input dan output. Setelah kompleksitas internal, atau jumlah I / O, melampaui sepele ada ledakan kombinatorial di mana jumlah keadaan internal yang mungkin menjadi astronomi. Tempat nomor seperti Googol dilemparkan.
sumber
Membuktikan bahwa CPU tidak melakukan sesuatu yang licik sangat sulit. Contoh klasik adalah mesin pemungutan suara. Jika ada sedikit di dalamnya yang mengambil salinan suara Anda dan kemudian menyelundupkannya ke beberapa diktator, itu bisa berarti hidup atau mati untuk Anda di beberapa tempat. Dan membuktikan tidak ada sedikit pun seperti itu di antara miliaran agak sulit.
Anda mungkin berpikir untuk mengisolasi chip secara fisik, sehingga praktis untuk melihat bahwa tidak ada koneksi kawat yang tidak tepat. Dan menempatkan chip lain, atau lebih dari satu chip secara seri (dari sumber yang berbeda) dalam koneksi jaringannya yang menjamin itu hanya terhubung ke tempat yang tepat. Kemudian gunakan daya untuk bersepeda setelah memberikan suara Anda. Dan berharap tidak ada bit yang tidak mudah menguap di sana. Atau koneksi nirkabel yang licik. Tapi apakah Anda percaya hidup Anda untuk itu?
sumber
Mengirimkan data apa pun ke NSA akan memerlukan akses jaringan, sehingga akan cukup mudah untuk menemukan backdoor seperti itu dengan menjalankan OS dengan layanan jaringan dinonaktifkan dan memeriksa antarmuka jaringan untuk lalu lintas. Untuk OS open-source, bahkan dimungkinkan untuk berjalan dengan dukungan jaringan penuh dan koneksi spot rogue oleh IP tujuan mereka yang tidak akan cocok dengan alamat mana pun yang dapat diakses oleh OS secara sah.
Backdoor berdasarkan RNG tanpa transmisi data akan memiliki kegunaan yang sangat terbatas. Kecuali jika CPU RNG adalah satu - satunya sumber entropi, kemungkinan backdoor tersebut akan memberikan keuntungan bagi penyerang sementara tidak jelas pada saat yang sama praktis nol . Kecuali jika Anda bersikeras bahwa teko Russel ada di luar sana meskipun tidak memiliki alasan yang kuat untuk itu, Anda harus dapat menerapkan argumen yang sama ke perangkat keras RNG di belakang rumah.
sumber
rdrand
ataurdseed
seperti yang disarankan Intel: sebagai satu-satunya sumber entropi untuk seed PRNG. Linux (kernel) memilih untuk tidak melakukannya untuk/dev/random
, tapi glibc / libstdc ++ 's saat inistd::random_device
tidak digunakan hanyardrand
jika tersedia pada saat runtime bukan membuka/dev/random
. Masuki panggilan perpustakaan standar dengan godboltstd::random_device
bukan RNG yang kuat secara kriptografis. Standar C ++ memungkinkan Anda untuk mengimplementasikannya dengan PRNG, secara efektif mengembalikan urutan yang sama setiap kali , sehingga tidak ada yang harus menggunakannya untuk enkripsi.