Kursus MIT "Keamanan Sistem Komputer". Kuliah 21: Pelacakan Data, Bagian 1

Institut Teknologi Massachusetts. Kursus Kuliah # 6.858. "Keamanan sistem komputer." Nikolai Zeldovich, James Mickens. Tahun 2014


Keamanan Sistem Komputer adalah kursus tentang pengembangan dan implementasi sistem komputer yang aman. Ceramah mencakup model ancaman, serangan yang membahayakan keamanan, dan teknik keamanan berdasarkan pada karya ilmiah baru-baru ini. Topik meliputi keamanan sistem operasi (OS), fitur, manajemen aliran informasi, keamanan bahasa, protokol jaringan, keamanan perangkat keras, dan keamanan aplikasi web.

Kuliah 1: “Pendahuluan: model ancaman” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 2: "Kontrol serangan hacker" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 3: “Buffer Overflows: Exploits and Protection” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 4: “Pemisahan Hak Istimewa” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 5: "Dari mana sistem keamanan berasal?" Bagian 1 / Bagian 2
Kuliah 6: “Peluang” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 7: “Kotak Pasir Klien Asli” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 8: “Model Keamanan Jaringan” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 9: "Keamanan Aplikasi Web" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 10: “Eksekusi simbolik” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 11: “Bahasa Pemrograman Web / Web” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 12: Keamanan Jaringan Bagian 1 / Bagian 2 / Bagian 3
Kuliah 13: "Protokol Jaringan" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 14: "SSL dan HTTPS" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 15: “Perangkat Lunak Medis” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 16: “Serangan Saluran Samping” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 17: “Otentikasi Pengguna” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 18: “Penjelajahan Pribadi di Internet” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 19: “Jaringan Anonim” Bagian 1 / Bagian 2 / Bagian 3
Kuliah 20: "Keamanan Ponsel" Bagian 1 / Bagian 2 / Bagian 3
Kuliah 21: “Melacak Data” Bagian 1 / Bagian 2 / Bagian 3

James Mickens: Bagus, mari kita mulai. Terima kasih telah datang ke ceramah pada hari istimewa ini sebelum Thanksgiving. Saya senang, teman-teman, bahwa Anda begitu mengabdikan diri pada keamanan komputer dan saya yakin Anda akan diminati di pasar tenaga kerja. Jangan ragu untuk merujuk saya sebagai sumber rekomendasi. Hari ini kita akan berbicara tentang pelacakan infeksi Taint-tracking, khususnya, tentang sistem yang disebut TaintDroid, yang menyediakan jenis analisis aliran informasi dalam konteks smartphone Android.



Masalah utama yang diangkat dalam kuliah adalah kenyataan bahwa aplikasi dapat mengambil data. Idenya adalah bahwa ponsel Anda mengandung banyak informasi rahasia - daftar kontak, nomor telepon Anda, alamat email dan semua itu. Jika sistem operasi dan telepon itu sendiri tidak hati-hati, maka aplikasi jahat mungkin dapat mengekstrak beberapa informasi ini dan mengirimkannya kembali ke server rumah, dan server akan dapat menggunakan informasi ini untuk semua jenis hal yang tidak menguntungkan, yang akan kita bicarakan nanti.

Dalam arti global, artikel tentang TaintDroid menawarkan solusi seperti itu: memantau data rahasia saat melewati sistem, dan pada dasarnya menghentikannya sebelum dikirim melalui jaringan. Dengan kata lain, kita harus mencegah kemungkinan mengirimkan data sebagai argumen untuk panggilan sistem jaringan. Rupanya, jika kita bisa melakukan ini, maka kita pada dasarnya dapat menghentikan kebocoran tepat pada saat itu mulai terjadi.

Anda mungkin bertanya-tanya mengapa izin Android tradisional tidak cukup untuk mencegah tipe data ini diekstraksi. Alasannya adalah bahwa izin ini tidak memiliki tata bahasa yang benar untuk menggambarkan jenis serangan yang kami coba cegah. Izin Android biasanya berurusan dengan izin aplikasi untuk menulis atau membaca sesuatu dari perangkat tertentu. Tetapi sekarang kita berbicara tentang apa yang ada pada tingkat semantik yang berbeda. Sekalipun aplikasi diberikan hak untuk membaca informasi atau menulis data ke perangkat seperti jaringan, akan berbahaya jika aplikasi itu membaca atau menulis data rahasia tertentu ke perangkat yang diizinkan untuk berinteraksi dengannya.

Dengan kata lain, menggunakan kebijakan keamanan Android tradisional, sulit untuk berbicara tentang tipe data tertentu. Jauh lebih mudah untuk berbicara tentang apakah aplikasi tersebut mengakses perangkat atau tidak. Mungkin kita bisa menyelesaikan masalah ini menggunakan solusi alternatif, saya akan menunjuknya dengan tanda bintang.



Solusi alternatif ini adalah tidak pernah menginstal aplikasi yang dapat membaca data sensitif dan / atau mengakses jaringan. Sepintas, masalah tampaknya sudah diperbaiki. Karena jika suatu aplikasi tidak dapat melakukan kedua hal ini secara bersamaan, ia tidak akan dapat mengakses data sensitif, atau akan dapat membacanya, tetapi tidak akan dapat mengirimkannya melalui jaringan. Apa yang Anda pikirkan adalah hasil tangkapannya?

Semua orang sudah memikirkan kalkun yang meriah, saya melihatnya di mata Anda. Nah, alasan utama mengapa ini adalah ide yang buruk adalah bahwa langkah ini dapat merusak pekerjaan banyak aplikasi yang sah. Lagi pula, ada banyak program, misalnya, klien surat, yang sebenarnya harus dapat membaca beberapa data sensitif dan mengirimkannya melalui jaringan.

Jika kita hanya mengatakan bahwa kita akan mencegah kegiatan semacam ini, kita sebenarnya akan melarang pekerjaan banyak aplikasi di ponsel, yang mungkin tidak akan disukai pengguna.
Ada masalah lain di sini - bahkan jika kami menerapkan solusi ini, itu tidak akan mencegah kebocoran data melalui berbagai mekanisme saluran pihak ketiga. Misalnya, dalam kuliah sebelumnya, kami menganggap bahwa cache browser, misalnya, dapat berkontribusi pada kebocoran informasi tentang pengguna yang mengunjungi situs tertentu. Oleh karena itu, bahkan dengan penerapan kebijakan keamanan seperti itu, kami tidak akan dapat mengendalikan semua saluran pihak ketiga. Beberapa saat kemudian kita akan berbicara tentang saluran pihak ketiga.

Solusi yang diusulkan tidak akan menghentikan kolusi aplikasi ketika dua aplikasi dapat bekerja sama untuk memecah sistem keamanan. Misalnya, bagaimana jika satu aplikasi tidak memiliki akses jaringan, tetapi dapat berkomunikasi dengan aplikasi kedua yang memilikinya? Bagaimanapun, ada kemungkinan bahwa aplikasi pertama dapat menggunakan mekanisme IPC Android untuk mentransfer data rahasia ke aplikasi yang memiliki izin jaringan, dan aplikasi kedua ini dapat mengunggah informasi ini ke server. Tetapi bahkan jika aplikasi tidak berkolusi, maka mungkin ada beberapa trik ketika satu aplikasi dapat memaksa aplikasi lain untuk secara tidak sengaja memberikan data sensitif.



Ada kemungkinan bahwa ada beberapa jenis cacat dalam program email karena yang menerima terlalu banyak pesan acak dari komponen lain dari sistem. Kemudian kita dapat membuat maksud khusus bagi Intent untuk mengelabui program email, dan itu akan memaksa aplikasi Gmail untuk mengirim sesuatu yang penting melalui email di luar telepon. Jadi solusi alternatif ini tidak berfungsi dengan cukup baik.

Jadi, kami sangat khawatir data rahasia keluar dari ponsel. Pertimbangkan apa yang, dalam praktiknya, lakukan aplikasi jahat untuk Android. Apakah ada serangan di dunia nyata yang dapat dicegah dengan melacak infeksi taint-tracking? Jawabannya adalah ya. Program jahat menjadi masalah yang semakin meningkat untuk ponsel. Hal pertama yang dapat dilakukan aplikasi jahat adalah menggunakan lokasi atau IMEI Anda untuk mengiklankan atau memaksakan layanan.

Perangkat lunak berbahaya dapat menentukan lokasi fisik Anda. Misalnya, Anda tidak jauh dari kampus MIT, jadi Anda adalah siswa yang lapar, jadi mengapa tidak mengunjungi restoran beroda saya, yang letaknya sangat dekat?

IMEI adalah bilangan bulat yang mewakili pengidentifikasi unik ponsel Anda. Ini dapat digunakan untuk pelacakan Anda di tempat yang berbeda, terutama di tempat-tempat di mana Anda tidak ingin "menyala". Jadi, secara alami, ada program jahat yang dapat melakukan hal-hal seperti itu.

Hal kedua yang dilakukan malware adalah mencuri data pribadi Anda. Mereka mungkin mencoba mencuri nomor telepon atau daftar kontak Anda dan mencoba mengunggah hal-hal ini ke server jarak jauh. Ini mungkin diperlukan untuk menyamar sebagai Anda, misalnya, dalam pesan yang nantinya akan digunakan untuk mengirim spam.

Mungkin hal terburuk yang dapat dilakukan malware, setidaknya bagi saya, adalah mengubah ponsel Anda menjadi bot.



Ini, tentu saja, adalah masalah yang tidak harus dihadapi orang tua kita. Ponsel modern sangat kuat sehingga dapat digunakan untuk mengirim spam. Ada banyak program jahat yang ditujukan pada lingkungan perusahaan tertentu yang melakukan hal itu. Setelah di telepon Anda, mereka mulai menggunakannya sebagai bagian dari jaringan spamming.

Mahasiswa: apakah ini malware yang ditujukan khusus untuk meretas OS Android, atau hanya aplikasi biasa? Jika ini adalah aplikasi yang khas, maka mungkin kita bisa mengamankannya dengan izin?

Profesor: Ini pertanyaan yang sangat bagus. Ada dua jenis malware. Ternyata, sangat mudah untuk membuat pengguna mengklik tombol yang berbeda. Saya akan memberi Anda sebuah contoh yang menyangkut malware tidak sebanyak perilaku sembrono orang.
Ada permainan Angry Birds yang populer, Anda pergi ke App Store dan mencarinya di bilah pencarian aplikasi. Yang pertama dalam hasil pencarian Anda akan diberikan game Angry Birds asli, dan baris kedua mungkin berisi aplikasi Angry Birdss, dengan dua s pada akhirnya. Dan banyak orang akan lebih suka mengunduh aplikasi kedua ini, karena mungkin harganya lebih murah daripada versi aslinya. Lebih lanjut, selama instalasi, aplikasi ini akan menulis bahwa setelah instalasi Anda akan mengizinkannya melakukan ini-dan-ini dan ini, dan Anda akan berkata: "tentu saja, tidak ada masalah!" Karena Anda menerima Angry Birds yang diinginkan untuk uang belaka. Setelah "booming" ini - dan Anda berada di hook seorang hacker!

Tapi Anda benar ketika Anda menganggap bahwa jika model keamanan Android benar, maka pemasangan malware akan sepenuhnya bergantung pada kebodohan atau kenaifan pengguna yang memberikannya akses ke jaringan, misalnya, ketika game Anda "Tic Tac Toe" seharusnya tidak memiliki akses ke jaringan.

Dengan demikian, Anda dapat mengubah ponsel Anda menjadi bot. Ini mengerikan karena berbagai alasan, tidak hanya karena ponsel Anda mengirim spam, tetapi juga karena, mungkin, Anda membayar data semua surat yang dikirim dari ponsel Anda. Selain itu, baterai habis dengan cepat, karena ponsel Anda terus-menerus sibuk mengirim spam.

Ada aplikasi yang akan menggunakan informasi pribadi Anda untuk menyebabkan kerusakan. Yang sangat buruk tentang bot ini adalah ia dapat benar-benar melihat daftar kontak Anda dan mengirim spam atas nama Anda kepada orang-orang yang mengenal Anda. Selain itu, kemungkinan mereka akan mengklik sesuatu yang berbahaya dalam surat ini meningkat berkali-kali.



Jadi, mencegah ekstraksi informasi adalah hal yang baik, tetapi tidak mencegah kemungkinan peretasan. Ada beberapa mekanisme yang harus kita perhatikan pertama-tama, karena mereka mencegah penyerang menangkap smartphone Anda dengan mendidik pengguna tentang apa yang dapat mereka klik dan tidak boleh mengklik dengan cara apa pun.

Jadi, pelacakan noda saja bukanlah solusi yang memadai untuk mencegah situasi yang mengancam untuk merebut ponsel Anda.

Mari kita lihat cara kerja TaintDroid. Seperti yang saya sebutkan, TaintDroid akan melacak semua informasi sensitif Anda saat menyebar melalui sistem. Jadi, TaintDroid membedakan antara apa yang disebut "sumber informasi" Sumber informasi dan "wastafel informasi". Sumber informasi menghasilkan data sensitif. Biasanya ini adalah sensor - GPS, accelerometer dan sejenisnya. Ini bisa berupa daftar kontak Anda, IMEI, semua yang dapat menghubungkan Anda, pengguna tertentu, dengan telepon Anda yang sebenarnya. Ini adalah perangkat yang menghasilkan informasi yang terinfeksi, yang disebut sumber data yang terinfeksi - Sumber Taint.

Dalam hal ini, penyadapan informasi adalah tempat di mana data yang terinfeksi tidak boleh bocor. Dalam kasus TaintDroid, penyerap utama adalah jaringan. Nanti kita akan berbicara tentang fakta bahwa Anda dapat membayangkan lebih banyak tempat di mana informasi bocor, tetapi jaringan tersebut menempati tempat khusus di TaintDroid. Mungkin ada Informasi lain yang tenggelam dalam sistem yang lebih umum daripada telepon, tetapi TaintDroid dirancang untuk mencegah kebocoran ke jaringan.

TaintDroid menggunakan bitvector 32-bit untuk mewakili infeksi Taint. Ini berarti Anda tidak boleh memiliki lebih dari 32 sumber infeksi terpisah.



Oleh karena itu, setiap informasi rahasia akan memiliki unit yang terletak di posisi tertentu jika terinfeksi dengan sumber infeksi tertentu. Misalnya, itu diperoleh dari data GPS, dari sesuatu dari daftar kontak Anda, dan seterusnya dan seterusnya.

Menariknya, 32 sumber infeksi sebenarnya tidak begitu banyak. Pertanyaannya adalah apakah angka ini cukup besar untuk sistem khusus ini dan apakah cukup besar untuk sistem umum yang mengalami kebocoran informasi. Dalam kasus khusus TaintDroid, 32 sumber infeksi adalah jumlah yang wajar, karena masalah ini menyangkut aliran informasi yang terbatas.

Mempertimbangkan semua sensor yang ada di ponsel Anda, database rahasia dan sejenisnya, 32 tampaknya merupakan jumlah yang tepat dalam hal menyimpan bendera yang terinfeksi ini. Seperti yang akan kita lihat dari implementasi sistem ini, 32 sebenarnya adalah angka yang sangat nyaman, karena sesuai dengan 32 bit, sebuah integer yang dengannya Anda dapat membangun flag-flag ini secara efektif.

Namun, seperti yang akan kita diskusikan nanti, jika Anda ingin memberi programmer kemampuan untuk mengendalikan kebocoran informasi, yaitu, tentukan sumber infeksi mereka sendiri dan jenis kebocoran mereka sendiri, maka 32 bit mungkin tidak cukup. Dalam hal ini, pertimbangkan untuk menambahkan dukungan runtime yang lebih canggih untuk menunjukkan lebih banyak ruang.

Secara kasar, ketika Anda melihat bagaimana suatu infeksi mengalir melalui suatu sistem, dalam arti umum, itu terjadi dari kanan ke kiri. Saya akan memberikan contoh sederhana. Jika Anda memiliki beberapa jenis operator, misalnya, Anda mendeklarasikan variabel integer yang sama dengan nilai garis lintang lokasi Anda: Int lat = gps.getLat (), maka pada dasarnya benda yang terletak di sebelah kanan tanda sama menghasilkan nilai yang memiliki semacam ikatan dengan infeksi nya.



Jadi bendera tertentu akan ditetapkan, yang mengatakan: "hei, nilai yang saya kembalikan ini berasal dari sumber rahasia"! Jadi infeksi akan datang dari sini, di sisi kanan, dan pergi ke sini, ke kiri, untuk menginfeksi bagian lat ini. Ini adalah tampilannya di mata pengembang yang menulis kode sumber. Namun, mesin virtual Dalvik menggunakan format register huruf kecil ini untuk membuat program, dan ini sebenarnya adalah bagaimana semantik yang semantik diimplementasikan dalam kenyataan.

Dalam tabel untuk salah satu artikel kuliah ada daftar besar perintah dengan deskripsi tentang bagaimana infeksi mempengaruhi jenis-jenis perintah. Sebagai contoh, Anda dapat membayangkan bahwa Anda memiliki operasi bergerak-op yang menunjuk ke tujuan dst dan sumber srs. Dalam mesin virtual Dalvik, pada mesin komputasi abstrak, ini dapat dianggap register. Seperti yang saya katakan, infeksi berpindah dari sisi kanan ke sisi kiri, jadi dalam kasus ini, ketika penerjemah Dalvik melaksanakan instruksi dari sisi kanan, ia mempertimbangkan label noda dari parameter sour dan menetapkannya ke parameter dst.

Misalkan kita memiliki instruksi lain dalam bentuk operasi biner-biner yang melakukan sesuatu seperti penambahan. Kami memiliki satu tujuan dst dan dua sumber: srs0 dan srs1. Dalam hal ini, ketika penerjemah Dalvik memproses instruksi ini, diperlukan pewarnaan dari kedua sumber, menggabungkannya, dan kemudian menetapkan penyatuan ini ke tujuan dst.



Ini sangat sederhana. Tabel menunjukkan berbagai jenis instruksi yang akan Anda lihat, tetapi untuk perkiraan pertama, ini adalah cara paling umum untuk menyebarkan infeksi dalam sistem. Mari kita lihat beberapa kasus menarik yang disebutkan dalam artikel ini. Salah satu kasus khusus tersebut adalah array.

Misalkan Anda memiliki perintah char c yang memberikan nilai tertentu C. Pada saat yang sama, program mendeklarasikan beberapa char atas [] array yang akan berisi huruf kapital "A", "B", "C": char upper [] = ["A "," B "," C "]

Hal yang sangat umum dalam kode adalah pengindeksan ke dalam array seperti ini, menggunakan C secara langsung, karena, seperti yang kita semua tahu, Kernigan dan Ritchie belajar bahwa sebagian besar karakter adalah bilangan bulat. Jadi Anda dapat membayangkan bahwa ada beberapa kode char upperC yang mengatakan bahwa versi huruf besar dari karakter ini "A", "B", "C" sesuai dengan indeks spesifik dalam tabel ini: char upperC = upper [C]



Hal ini menimbulkan pertanyaan tentang infeksi apa yang harus didapatkan pada kasus ini. Tampaknya dalam kasus-kasus sebelumnya semuanya sederhana dengan kami, tetapi dalam kasus ini kami memiliki banyak hal yang terjadi. Kami memiliki larik ["A", "B", "C"], yang dapat memiliki jenis infeksi dan kami memiliki simbol C ini, yang juga dapat memiliki jenis infeksi sendiri. Dalvik , binary-op. upperC [C] .

, upperC - upper [ ]. - [C]. , , upperC , .

: , taint move op binary op?

: move op. , srs… -, . , , , , , taint. , , .
, srs , , . srs : « , 2 , srs». .

– , taint. , srs0 srs1, taint, :

\

dst :

\

, , 32- , , . , . taints, , .
, , , binary-op. upperC [C] [«», «», «»]. TaintDroid , taint . , . , 32- , «» , .

, taint. — , , ? , taint , , . , , , , . - , .

, . , , - , , . , , – , , . .

, – , , Native methods, - . Native- . , Dalvik , system.arraycopy(), - , C C++. Native method, .

- JNI. JNI, Java Native Interface — C C++ Java. , Java , Java. x86, ARM , .

- taint , Dalvik. Java-, C C++ . , Native-, TaintDroid , Java.

\

, « », , taint. , – . - , . , Dalvik , system.arraycopy(), , taint. arraycopy() : « , , , , ».

? , , . , , Dalvik , , , .

- JNI , . , , , C C++, .

, , . , - , , , . .

26:25

Kursus MIT "Keamanan Sistem Komputer". 21: « », 2


.

Terima kasih telah tinggal bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda, diskon 30% untuk pengguna Habr pada analog unik dari server entry-level yang kami temukan untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps dari $ 20 atau bagaimana membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps , .

Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki 2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV dari $ 249 di Belanda dan Amerika Serikat! Baca tentang Cara Membangun Infrastruktur Bldg. kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?

Source: https://habr.com/ru/post/id433376/


All Articles