Konferensi HACKTIVITY 2012. Teori Big Bang: Evolusi Pentesting dalam Peningkatan Keamanan. Bagian 1

Salam semuanya, apa kabar? Saya harap Anda baik-baik saja, lalu dengarkan. Dengarkan apa yang selalu terjadi pada saya ketika saya meninggalkan Amerika dan datang ke Asia atau Eropa, ke semua negara lain ini. Saya mulai berbicara, saya berdiri di atas panggung dan mulai berbicara dengan orang-orang, saya memberi tahu mereka ... bagaimana mengatakannya secara politis ... orang-orang yang bukan orang Amerika juga orang-orang baik, dan saya senang melihat dan mendengar mereka.



Dengar, aku pikir kamu akan mengerti aku dengan benar, jadi santai sedikit, luruskan pundakmu, aku serius! OK, ketika saya melakukan pekerjaan saya di sini, saya ingin Anda berhubungan dengan saya, seolah-olah. Saya memiliki titik akses nirkabel dan beberapa aplikasi yang rentan berantakan, dan saya punya ide bagaimana membuat program Anda berantakan ... Tahun lalu saya berbicara dan mabuk di atas panggung, dan kemudian, setelah itu, seorang kritik mendatangi saya dan berkata: " Hei Joe, kamu melakukan presentasi normal, tetapi demo itu jelas tidak cukup! โ€ Karena itu, hari ini seluruh presentasi saya akan menjadi demo yang solid, dan saya ingin tahu apa lagi yang mungkin tidak Anda sukai.

Jadi, "Evolusi pentesting dalam kondisi keamanan yang meningkat." Saya telah menabrak jaring selama 10 tahun, dan betapa menyebalkannya mereka, mereka tetap sama. Saya tidak tahu apakah Anda memiliki pengalaman dengan mereka, tetapi jaringannya masih payah. Dan aplikasi masih payah. Apa yang terjadi sekarang? Kami sekarang memiliki 50 juta produk keamanan yang melindungi aplikasi Anda, jadi apa? - Menyebalkan! - Dan Anda pergi dengan mereka di internet, lalu apa? - Menyebalkan! - Dan kami memiliki banyak hal yang melindungi semua ini menyebalkan!

Jadi apa pekerjaan saya hari ini? Siapa saya? Kebanyakan penggiat jejaring mengenal saya, saya orang kulit hitam di konferensi keamanan, ya, ini saya, orang yang sama yang biasanya berkata tentang: "Ya, yang ini, seperti dia ... orang Afrika yang berwarna ... saya pernah melihatnya sebelumnya!"

Baiklah teman-teman, untuk beberapa waktu saya sibuk meretas ke dalam jaringan. Jadi, saya seorang cracker, saya seorang kutukan, dan dia yang mengenal saya juga tahu bahwa saya suka minum rum dan Coca-Cola. Tapi ada sesuatu yang berubah dalam hidup saya, saya punya pacar baru, dan dia gila karena saya minum terlalu banyak dan dia benar-benar tidak suka bagaimana saya makan, itu sebabnya saya harus bepergian, jadi saya harus datang ke sini, Saya harus makan semua gulai lemak ini. Jadi tolong jangan katakan padanya apa yang saya makan dan minum.

Pada slide ini, Anda melihat kinerja pertama saya di DefCon 10 tahun yang lalu, lihat, lalu masih ada monitor CRT, apakah ada yang mengingatnya?



Saya berbicara dengan banyak orang di sana, dan kami terlibat dalam "penangkapan bendera" dengan mereka. "Tangkap bendera" - itu hanya pengalaman yang luar biasa yang benar-benar mengubah hidup saya secara ajaib, seperti Yesus, saya siap untuk berseru "Haleluya!", Itu sangat menakjubkan.
Jadi, yang ingin saya lakukan adalah membuat tes Capture the Flag untuk pemula. Jika Anda seorang pemula, Anda mungkin belum pernah berpartisipasi dalam Capture the Flag. Ada kursus pelatihan bulanan untuk tes ini, yang mencakup mempelajari masalah enkripsi dan dekripsi, menguji jaringan, menguji malware, mempelajari masalah rekayasa balik, menggunakan eksploit, dan hal-hal lain semacam itu. Ini adalah acara yang sangat solid dan menyenangkan. Singkatnya, mari kita coba melakukan hal serupa.

Pada slide Anda melihat pengaturan untuk jaringan nirkabel, saya meminta Anda untuk tidak merusaknya. Jika Anda ingin mengakses jaringan yang disebut joe-hacktivity-demo, Anda dapat menggunakan kata sandi ini.



Ada file teks di sini, alasan untuk membuatnya adalah hanya memungkinkan Anda untuk menyalin dan menempelkan informasi ke bilah alamat browser. Biasanya orang melakukan ini dengan hal-hal seperti Windows 7, tetapi semua yang Anda butuhkan dalam hal ini hanyalah browser web. Jadi, jika Anda memiliki Firefox, Chrome, yang Anda butuhkan untuk meretas hanya membuka iPad atau laptop Anda, salin teks ini dan buka situs web toko buku online. Saya memiliki sistem deteksi intrusi IDS, saya menjalankan Snort Box, dan kami hanya akan menjaga agar jaringan ini tetap beroperasi. Kita akan menggunakan banyak aplikasi web, banyak suntikan SQL, banyak skrip lintas situs terhadap host yang memiliki aplikasi web ini. Lalu kami memiliki "kotak" lain di mana ada firewall yang dikonfigurasi sehingga saya dapat mengarahkan Anda ke beberapa ID dan firewall. Kami hanya masuk ke sana, membahasnya dan melakukan beberapa hal menarik di sana.

Jadi, apakah saya perlu terus menjelaskan atau dapatkah saya memulai? Baiklah, mari kita mulai. Saya memiliki sistem deteksi intrusi yang rumit di laptop saya di sini. Sekarang saya akan memperbesar gambar di layar tempat file teks ditampilkan. Anda dapat memeriksa alamatnya di bilah browser, ini adalah file teks kami.



Saya akan menerapkan skrip lintas situs menggunakan SQL sepele, tetapi jika Anda ingin mengotak-atik aplikasi lebih serius, Anda dapat memeriksa file teks ini, yang memiliki dua aplikasi. Aplikasi di 2.6, dikembangkan pada platform ASP.NET, memverifikasi bahwa jaringan berfungsi, ini adalah versi terbaru dari platform DotNet dengan pustaka skrip lintas situs dan beberapa mekanisme keamanan lainnya, dan file web.config yang dimodifikasi untuk memuat pustaka keamanan lainnya.

Aplikasi di 2.7 adalah aplikasi yang sama dengan yang sebelumnya, tetapi tidak hanya memiliki semua fitur keamanan DotNet, tetapi juga firewall untuk aplikasi jaringan. Jadi, saya ingin "mengacaukan" dengan aplikasi ini pada 2.35, dan saya akan membicarakannya.



Jika Anda terbiasa dengan dasar-dasar scripting lintas situs dan injeksi SQL, Anda akan memahami apa itu 2.6, 2.5, dan 2.7. Jadi kami memiliki file teks ini yang dapat kami salin dan tempel. Mari kita bicara tentang parameter yang saya masukkan di bilah alamat situs kami. Ini adalah bookdetail.aspx? Id = 2, dan tanda tanya berarti bahwa ID parameter ID yang kami butuhkan adalah 2. Faktanya, antarmuka server web Anda berbicara dengan basis data server web untuk mengetahui apakah ada entri di dalamnya, terkait dengan pengidentifikasi data ini adalah ID dengan nilai 2. Dan database merespons antarmuka: "ya, bung, saya punya apa yang Anda butuhkan!"



Apa yang akan kita lakukan sekarang adalah memeriksa untuk melihat apakah injeksi SQL bekerja untuk kita. Oleh karena itu, kami akan melemparkan di sini kode sederhana dalam bentuk tanda kutip di akhir dan melihat bahwa ini menyebabkan pesan kesalahan "Buka tanda kutip setelah string karakter". Ini adalah salah satu tes yang paling umum ketika Anda mengganti parameter dengan tanda kutip atau menggunakan tanda kutip secara langsung sebagai parameter. Ini sering terjadi, dan tidak ada yang mengejutkan.



Mari kita coba sedikit berbeda. Saya akan mengganti string parameter dengan nilai bookdetail.aspx? Id = 4. Harap dicatat - ketika saya mengganti 4 ini dengan dua, halaman yang ditampilkan berubah, gambar di bagian atas halaman berubah. Sekarang coba ambil keduanya dalam kurung, gambar telah berubah lagi. Jika saya menulis di akhir baris (4-2), gambarnya akan sama dengan 2 di akhir baris. Jika saya menulis dalam tanda kurung (4-1), halaman akan terlihat sama seperti jika saya meletakkan angka 3 di akhir, yaitu, saya menyamakan ID dengan triple.



Jadi, siapa di antara Anda yang menyelidiki hal-hal ini sambil melakukan pentesting? Anda pikir begitu: "Oke, saya akan menempelkan kode SQL di sini di bilah alamat, dan itu akan mengarahkan saya ke halaman beranda, dan sekarang saya akan mengubahnya, dan itu akan dapat mengirim saya ke mana pun saya butuhkan atau kembali ke halaman beranda. Bahkan, Anda menekan pesan kesalahan, dan tidak adanya pesan kesalahan ODBS membuat Anda menari dengan gembira karena Anda bisa menyuntikkan kode SQL.

Saya melihat ada sesuatu yang salah, tetapi saya tidak bisa memperbaikinya. Dan apa yang terjadi? Pengembang Anda menganggap dirinya yang paling cerdas karena ia dapat menghapus pesan kesalahan. Tetapi apa yang sebenarnya terjadi ketika Anda memaksa database untuk melakukan semua perhitungan aritmatika ini?

Jadi, database melakukan perhitungan ini: (4-1), dan kami mendapatkan halaman 3. Kami baru saja membuktikan bahwa injeksi SQL sekarang mungkin. Jadi Anda dapat kembali ke pengembang dan berkata: "tidak, tidak, tidak, man, Anda masih memiliki opsi injeksi SQL, meskipun faktanya tidak ada pesan kesalahan!" Anda hanya dapat memperbaikinya sedikit, dan ini terjadi setiap saat dan di mana-mana.

Saya menggunakan trik jenis ini, tetapi permainan berubah, dan sekarang banyak orang menggunakan hal seperti itu sebagai firewall aplikasi web. Oleh karena itu, jika Anda memasukkan sesuatu seperti: 2 atau 1 dalam (pilih pengguna) - dalam string parameter alamat, Anda biasanya mendapatkan pesan kesalahan karena awalan yang salah dari nama pemilik basis data DBO (pemilik basis data) untuk tipe data ini. Dalam hal ini, firewall jatuh ke dalam perangkap pada tahap pilihan pengguna ini dan mengatakan: "tidak, tidak, tidak, saya tidak bisa membuat pilihan"!



Oleh karena itu, ketika Anda melihat hal-hal seperti itu, ini berarti bahwa jika Anda belum mengetahui apakah Anda telah menemukan firewall aplikasi web atau jika Anda tidak melakukan trik aritmatika ini, masih ada cara yang baik untuk mengetahui apakah ada injeksi SQL dalam kasus ini dan apakah Aplikasi web ini adalah firewall.

Saya akan memberi tahu Anda bahwa ada satu hal yang mengerikan - kebutuhan untuk melakukan pentesting rantai ritel. Apakah ada di antara Anda yang tahu apa artinya ini dalam bahasa Inggris? PCI? Saya benci PCI, tapi saya selalu terlibat dalam pentesting rantai ritel. PCI adalah standar keamanan data berdasarkan peraturan Standar Keamanan Data Industri Kartu PCI (PCI DSS) 2008. "Pentesting Jaringan Ritel" memungkinkan Anda memverifikasi kepatuhan dengan standar PCI dan mengidentifikasi ancaman nyata.

Standar ini adalah kebijaksanaan tanpa batas yang mengatakan kebenaran: "mereka harus ... itu harus ..." dan Anda harus menggunakan standar enkripsi yang aman sesuai dengan standar otentikasi internasional, dan Anda akan melakukannya ... atau Anda dapat menggunakan firewall aplikasi web Anda.

Semua pengguna yang bekerja sama dengan saya melakukan hal yang benar, mereka melakukan pemodelan ancaman, kemudian mereka mengatur pertemuan, pertemuan lain, kemudian mereka bertemu lagi dan akhirnya memperbaiki semuanya. Anda pikir begitu? Dan tidak! Mereka "menyerahkan truk mereka kembali", dan sensor parkirnya memancarkan sinyal sebaliknya. Mereka hanya menyembunyikan masalah di lemari, tidak terlihat, dan berkata: "kami memperbaiki semuanya!"

Sekarang saya akan menunjukkan satu hal lagi, yang, menurut saya, sangat menarik untuk dimainkan. Lihat di sini Yang saya lakukan sejauh ini adalah mengimplementasikan SQL. Sekarang saya akan melakukan ini - saya akan memilih alamat basis data utama, menyalinnya dan menempelkannya ke bilah alamat peramban. Kita melihat bahwa basis data pertama disebut "BookApp" ketika parameter terakhir dalam string parameter alamat adalah 0.



Sekarang saya akan mengganti 0 ini dengan 1, dan Anda akan melihat apa yang terjadi - kami melihat bahwa basis data kedua disebut "master".



Kemudian kami mengubah 1 menjadi 2 dan melihat bahwa basis data selanjutnya disebut "tempdb".



Sekarang bantu aku! Bisakah Anda mengatakan bahwa kami telah mengidentifikasi injeksi SQL? Ya itu bagus! Tetapi masalahnya adalah bahwa tidak ada dalam program deteksi intrusi IDS saya yang berubah menjadi merah! Hal ini, yang tidak merah di layar, ketika kita melakukan injeksi SQL, tidak ada ancaman yang terdeteksi!



Ok, sekarang lihat di sini - saya harus melakukan sesuatu yang salah. Saya tidak mengambil informasi basis data langsung dari basis data, dan apa yang dikatakan benda ini yang saya garis bawahi dengan warna merah?



Tidak, tunggu sebentar! Saya akan mencoba melakukannya secara berbeda. Alih-alih penomoran basis data, mari kita gunakan penomoran dari baris tabel di atas yang tertulis "kesalahan injeksi SQL - mengambil 1 tabel basis data".



Saya menyalin data ini dan menempelkannya ke bilah alamat browser. Lihat apa yang kita miliki sekarang - frasa (pilih 1 nama teratas dari subjek di mana xtype = char (85)) - memberikan apa?

Benar, nama basis data BOOKMASTER utama. Saya pikir ini adalah injeksi SQL, siapa yang berpikir sama? Bahkan Stevie Wonder dapat melihat bahwa ini adalah injeksi SQL!



Tapi mari kita lihat di sini - 0 ancaman! Tapi ini sistem yang murah, ada kesalahan, aturannya belum diperbarui.



Saya pikir aturan validasi IDS agak ketinggalan jaman, saya mendownloadnya pagi ini, dan mereka sedikit, agak ketinggalan jaman. Mungkin ada yang salah di sini, saya mengunduh aturan lama, dan saya harus mengunduh aturan terbaru, yang tidak lebih dari 3 jam - saya tidak tahu.
Tapi mari kita lihat lebih jauh. Bagaimana jika kita mencoba untuk menyalin data lain yang katanya "kesalahan injeksi SQL - mengambil 2 tabel database".



Jadi, catatan dari basis data ke-2 memberi kita apa yang disebut "sysdiagrams".



Yaitu, kami mengajukan pertanyaan, dapatkah parameter xtype = char (85)) dan nama 'BOOKMASTER' menunjukkan nama tingkat yang lebih tinggi daripada BOOKMASTER? Dengan kata lain, dapatkah sistem memberi saya nama tabel yang mengikuti? Ini adalah bagaimana kami membuat daftar basis data - segera setelah Anda mengambil nama basis data dan nama tabel, Anda terus bertanya, "hei Bung, bisakah saya mendapatkan nama tabel yang lebih besar dari yang saya lihat sekarang?", Dan Anda hanya melanjutkan proses ini dan mendapatkan nama-nama tabel baru.

Tapi mari kita kembali dan melihat program saya - ini sekali lagi menunjukkan bahwa jumlah ancaman keamanan unik adalah 0. Kami memiliki masalah lagi!



Bagaimana jika saya mencoba injeksi SQL berbasis serikat pekerja, SQL berbasis serikat pekerja? Di sini saya memiliki beberapa jenis suntikan SQL, dan sekarang kami hanya menyisipkan baris yang langsung menunjuk ke catatan yang ID-nya adalah 100.



Akibatnya, kami mendapat jawaban bahwa angka 100 berada di luar rentang nilai yang valid. Karena jika saya memiliki 10 kolom, dapatkah saya memilih 5? Tentu saja! Bisakah saya memilih 20 kolom dari 10? Tentu tidak! Yaitu, basis data menjawab: "Maaf, kawan, tetapi saya tidak memiliki begitu banyak kolom!" Hebat, lalu saya ubah 100 menjadi 50, dan dia lagi menulis kepada saya, "50 di luar jangkauan." Baiklah, bagaimana dengan 25? Tidak, 25 juga di luar jangkauan. Katakan padaku apa lagi yang harus dihubungi? 13? Ini adalah angka sial, tapi bagus, kita akan memanggil 13, dan juga di luar jangkauan.

Ayo ambil 9! Hebat, sembilan berhasil! Ini adalah entri yang benar, saya perlu lebih dari 9, tetapi kurang dari nilai batas, jadi mari kita bermain lagi untuk mencari tahu berapa banyak kolom yang dimiliki tabel kita.



Jadi bagaimana kita menentukan berapa banyak kolom dalam sebuah tabel? Sekarang kita akan memasukkan bar alamat secara berurutan dari 1 hingga 9, yang disebut "pernyataan serikat", atau "pernyataan bersatu". Instruksi ini menggabungkan apa yang ditulis pengembang dengan apa yang Anda tulis sendiri.



Tetapi Anda harus memiliki jumlah angka yang tepat untuk kedua opsi instruksi untuk mengetahui nomor mana kolom Anda berakhir. Kami akan melakukan trik ini - menetapkan angka 2 nilai negatif, yaitu, memperbaikinya di bilah alamat 2 dengan โ€“2. Lihat apa yang terjadi.



Gambar dengan sampul buku menghilang, tetapi semua angka ini muncul - ini adalah nomor kolom dalam tabel database. Ayo, beri tahu saya nomornya! Dua? Baiklah, biarlah 2. Saya mengganti 2 secara berurutan dengan kata "user", dan sekarang dbo pengguna muncul alih-alih nama Buku 2 di halaman.



Bagaimana jika saya pergi ke nomor 3? Bersama-sama saya akan menulis nomor 3 @@ versi. Lihat apa yang kita dapatkan di halaman sekarang?



OK sekarang, teman-teman bantu saya! Bisakah kita sekarang mengatakan bahwa kita memiliki injeksi SQL?



Masih belum ada apa-apa! Sistem keamanan tidak melihat injeksi SQL.

Saya memulai karir keamanan saya sebagai analis sistem deteksi intrusi IDS. Itu adalah kehidupan yang mengerikan, Anda harus menonton intersepsi paket sepanjang hari, dan mungkin tidak lebih dari, mungkin, pernikahan, jadi itu tidak memaksa Anda untuk menempatkan peluru di kepala Anda.

Maksud saya, saya sama seperti yang lain, saya menyaksikan sepanjang hari bahwa itu sangat buruk, dan ketika Anda mulai melihat hal-hal yang berlalu lalang, itu hanya menakjubkan, itu gila.

Jadi katakanlah kita akan melakukan sesuatu yang menarik. Mungkin saya akan mengeluarkannya dari sini, salin dan seret ke sini. Jadi, saya memasukkan versi database, nama server di bilah alamat, lalu master.sys.fn_varbintohexstr (password_hash) - tidak ada yang menarik, bukan?



Sekarang kita mendapatkan data seperti itu di halaman, dan saya pikir baris paling atas akan berguna bagi kita.



Yang penting adalah kita bisa mengetahui bahwa IDS adalah hal hebat yang kita miliki! Jadi siapa yang bersamaku? Jalankan dengan cepat dan beli salah satu dari program ini!

Layar menunjukkan bahwa program itu lagi tidak mendeteksi suntikan SQL.



Ini hanya program yang hebat, bahkan lebih baik dari yang kita pikirkan, karena ini dapat mengkompilasi semua log pengguna yang tidak berguna yang tidak pernah dilihat orang, dan itu keren! Oke, misalkan kita melakukan sesuatu yang menarik. Kami menggunakan parameter ini: 1 = 1, 1 = 2 dan 1 * 1. Apakah satu sama dengan satu? Ya Apakah satu sama dengan dua? Tidak, tidak sama. Tetapi yang perlu kita lakukan adalah memeriksa untuk melihat apakah perubahan pada halaman yang benar yang ingin kita katakan adalah โ€œenumerateโ€.



Saya salin dan tempel parameter dari baris pertama 1 = 1 ke bilah alamat, lihat halaman, lalu ubah ungkapan ini menjadi 1 = 2. Jika halaman berubah dalam beberapa cara "tidak jujur" - seperti yang Anda lihat, itu benar-benar telah berubah - maka berdasarkan ini, dari sudut pandang pemrograman, saya dapat menyimpulkan bahwa ada injeksi SQL. Karena jika saya menggunakan 1 = 1 dan 1 = 2, maka saya dapat mengambilnya dengan cara ini: โ€œOK, jika saya mengambil nama pengguna dbo dan 1 = 1, karena menurut petunjuk, jika nama pengguna adalah dbo dan 1 = 1, maka kami mendapatkan halaman yang benar, dan terima kasih untuk itu saya tahu bahwa nama pengguna benar-benar dbo. " Apakah itu jelas? Nah, lihat kembali pada tab IDS - tidak ada ancaman! Saya mengatakan ini adalah produk yang luar biasa.
Sekarang mari kita lakukan hal yang menarik. Pertimbangkan nilai-nilai ini. Satu lebih dari satu minus? Jelas lebih banyak. Tetapi kemudian muncul hal yang sangat saya sukai. Ungkapan ini adalah "1 kurang dari lebih dari 1".



Saya ulangi - ini hanya cara berbeda untuk mengajukan pertanyaan yang sama. Siapa yang punya anak, Anda tahu bagaimana mereka bisa bertanya. "Bolehkah aku minta kue ini?" - Tidak, kamu tidak bisa! - Mungkin saya dapat memiliki chip ini? - Tidak, tidak ada cookie! "Kalau begitu, mungkin Oreo ini bisa?" Aku tahu ini, aku sudah mengalaminya.

25:50 mnt

Konferensi HACKTIVITY 2012. Teori Big Bang: Evolusi Pentesting dalam Peningkatan Keamanan. Bagian 2


Sedikit iklan :)


, . ? ? , , VPS $4.99 , entry-level , : VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps $19 ? ( RAID1 RAID10, 24 40GB DDR4).

Dell R730xd 2 - Equinix Tier IV ? 2 Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 $199 ! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mulai dari $ 99! 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/id480388/


All Articles