Serangan Sumber Trojan, apa itu?

18/11/21

Bagaimana jika mungkin untuk mengelabui kompiler agar menghasilkan file biner selain logika yang terlihat oleh mata manusia dalam kode sumber? Kami menunjukkan kepada Anda bahwa melakukan ini tidak hanya mungkin, tetapi juga dapat dieksploitasi dengan mudah ...

Hal ini tertuang dalam pendahuluan makalah "Sumber Trojan: Kerentanan Tak Terlihat", baru-baru ini diterbitkan oleh prof. Ross Anderson dari Universitas Cambridge, penulis teks "Teknik Keamanan", dan oleh Nicholas Boucher, mahasiswa doktoralnya. 

Penasaran, seperti yang sering terjadi di dunia cyber, kami memutuskan untuk memperdalam ...

Untuk memulai, ingatlah bahwa program yang ditulis dengan bahasa pemrograman modern memerlukan kompiler, yaitu program lain yang menganalisis teks program kami, memverifikasi kebenaran sintaksisnya, dan menerjemahkannya ke dalam program yang dioptimalkan dalam bahasa yang dapat dieksekusi oleh komputer. Dari sini kami memahami pentingnya pengembangan kompiler yang secara tidak sengaja dapat memasukkan kerentanan dalam program.

Pada 80-an Ken Thomson, salah satu bapak Unix, telah memperingatkan risiko ini dalam kuliahnya yang terkenal yang diberikan pada kesempatan pemberian "Penghargaan Turing" (setara dengan Hadiah Nobel untuk ilmu komputer) dengan judul yang menggugah. "Refleksi tentang mempercayai kepercayaan". Kompiler bahasa C itu sendiri adalah program yang ditulis dalam bahasa C, jadi untuk dapat mempercayai program yang dapat dieksekusi yang dihasilkan oleh kompiler, tidak hanya perlu mempercayai siapa pun yang menulis program, tetapi juga untuk mempercayai kompiler.

Sekarang, kembali ke artikel Boucher dan Anderson, mari kita mulai dari mempertimbangkan compiler sebagai penganalisis teks yang mengetahui istilah dan sintaks bahasa pemrograman. Karakter yang digunakan untuk membentuk teks perlu dikodekan di komputer. 

Untuk memahami apa jenis serangan baru yang disajikan oleh Boucher dan Anderson ini, pertama-tama kita perlu berbicara tentang pengkodean dan standar yang digunakan untuk pengkodean.

Salah satu standar yang paling banyak digunakan di dunia komputer dari waktu ke waktu adalah ASCII, Kode Standar Amerika untuk Pertukaran Informasi. Edisi pertama dari standar ini diterbitkan pada tahun 1963 dan berubah beberapa kali dari waktu ke waktu. Butuh tujuh bit untuk mengkodekan 128 karakter yang berbeda. 

Dengan perkembangan sistem komputer, kebutuhan berubah dan perlu untuk memperluas standar ASCII untuk memungkinkan pengkodean karakter yang berasal dari bahasa yang berbeda atau diperlukan untuk lingkungan tertentu.

Standar yang dikenal sebagai UNICODE dengan demikian secara bertahap berlalu. Standar ini memungkinkan 144.697 untuk dikodekan antara berbagai karakter dan simbol. Di antaranya adalah apa yang disebut abjad Kiri ke kanan (dari kiri ke kanan, seperti Italia, Rusia, Inggris ...) e Kanan ke kiri (dari kanan ke kiri, seperti Arab, Ibrani ...). Dalam kasus Unicode, yang merupakan salah satu standar pengkodean yang paling banyak digunakan saat ini, sebuah algoritma yang disebut Algoritma Dua Arah (BiDi). 

Algoritme BiDi dirancang untuk mengelola tampilan teks secara otomatis melalui apa yang disebut karakter kontrol (karakter override) yang memungkinkan Anda untuk secara eksplisit menentukan bagaimana bagian tertentu dari teks harus diperlakukan (misalnya Override Kanan Ke Kiri, RLO, menentukan untuk memperlakukan teks yang diterapkan sebagai kanan ke kiri). Karakter kontrol adalah karakter tak terlihat di layar yang memungkinkan Anda mengontrol tampilan bagian teks. Berikut adalah beberapa yang paling banyak digunakan.

Selanjutnya, karakter kontrol dapat "bersarang", sehingga memungkinkan untuk menyusun ulang tampilan teks dengan cara yang sangat kompleks.

Sekarang, jika teks yang ditampilkan di layar adalah kode program, harus diingat bahwa pada prinsipnya sintaks sebagian besar bahasa pemrograman biasanya tidak memungkinkan Anda untuk memasukkan karakter kontrol ini langsung ke kode sumber dengan cara banyak mereka jelas akan mengubah logika kontrol program. Namun, karena banyak bahasa memungkinkan penggunaan komentar dan string, dimungkinkan untuk menyisipkan karakter kontrol di dalam komentar atau string dan berdampak pada kode sumber sebagai BiDi menggantikan mereka tidak menghormati pembatas string dan komentar.

Jenis serangan yang dijelaskan oleh Boucher dan Anderson didasarkan pada karakteristik khas pengkodean hari ini. Faktanya, berkat karakter kontrol, dimungkinkan untuk memanfaatkan perbedaan antara apa yang ditampilkan dan apa yang sebenarnya dikodekan dan diteruskan ke kompiler dan juru bahasa untuk melakukan jenis serangan "Serangan Sumber Trojan" yang dijelaskan oleh Boucher dan Anderson.

Boucher dan Anderson juga menunjukkan bahwa jenis serangan ini dimungkinkan dengan bahasa pemrograman yang paling banyak digunakan termasuk C, C++, C#, JavaScript, Java, Rust, Go, dan Python. 

Contoh di bawah ini, dalam kode Python, menunjukkan bahwa kode yang dikodekan (dan karenanya dieksekusi pada mesin) di sebelah kiri berbeda dari kode sumber (di sebelah kanan) yang ditampilkan.

Berdasarkan yang terakhir diharapkan untuk menemukan nilai yang sama dengan 50 di bank ['alice'] pada akhir eksekusi, sedangkan dalam praktiknya nilai sekarang akan tetap sama dengan 100.

Fakta bahwa sampai sekarang tidak ada bukti serangan semacam ini tidak meyakinkan kita untuk masa depan karena, seperti kita, orang lain mungkin telah membaca makalah dan, mungkin, membuat keputusan untuk menguji konsep.

Davide Ariu, Giorgio Giacinto dan Alessandro Rugolo

Untuk mempelajari lebih lanjut:

Sumber Trojan: Kerentanan Tak Terlihat

Bug 'Sumber Trojan' cara baru untuk menyerang pengkodean program (techxplore.com)

Serangan Sumber Trojan berbahaya bagi penyusun bahasa program (gridinsoft.com)

Serangan Sumber Trojan

GitHub - nickboucher / trojan-sumber: Trojan Sumber: Kerentanan Tak Terlihat

Algoritma Teks Dua Arah Unicode - Panduan pengembang | MDN (mozilla.org)

https://doi.org/10.1145/358198.358210

https://www.cl.cam.ac.uk/~rja14/book.html