TLDR : Tentang bagaimana saya keluar dari pekerjaan saya sebagai penjaga keamanan dan menulis pemindai kerentanan saya sendiri.
Dan bagaimana Anda bisa menghasilkan uang darinya. Pada akhirnya adalah potongan-potongan kode dan spesifikasi pemindai.
Siapa dan apa yang rusak
Pada 1970-an, dahulu kala, Internet tampak seperti ini.

Ancaman utama baginya adalah para peneliti dan peminat yang pertama kali sampai ke dokumentasi dan jaringan perusahaan besar.
Sejak itu, internet telah banyak berubah. Serangan pada jaringan, layanan, dan aplikasi web telah menjadi kejadian sehari-hari. Setiap hari, pengembang dan peneliti menemukan puluhan kerentanan. Secara paralel, puluhan ribu situs diretas.
Ini terlihat jelas pada peta serangan Lab Kaspersky. Ini menampilkan pemicu IDS, pemindaian kerentanan, dan serangan botnet. Peta itu terlihat seperti gambar yang indah dan memiliki jutaan serangan per hari hanya di Rusia.

Kejahatan dunia maya tidak dilakukan oleh para amatir, tetapi oleh kelompok yang terdiri dari puluhan orang. Mereka melakukan ini karena minat. Ini bisnis. Mereka bukan cowok berkerudung hitam yang menulis "BLACK K0d" di malam hari di depan monitor. Ini adalah orang-orang yang aktif secara sosial yang bekerja di kantor di berbagai negara di dunia.
Karier saya sedemikian rupa sehingga selama beberapa tahun saya bertanggung jawab atas keamanan perimeter jaringan dan perlindungan aplikasi web. Tentang hasil pengalaman saya pada periode itu, saya akan ceritakan di artikel ini.
Jika Anda bekerja / bekerja di telekomunikasi, bank, penyedia atau Anda adalah pengembang di perusahaan besar, dan terutama jika Anda adalah orang keamanan, maka Anda tahu bahwa keamanan di perusahaan dengan lebih dari 10-15 situs adalah sampah, neraka, kematian.
Mari kita coba untuk memperbaiki situasi. Mereka mengatakan bahwa keamanan adalah suatu proses.
Dan ada banyak proses.
Sebutkan secara singkat:
- Manajemen ancaman
- Manajemen kerentanan
- Manajemen risiko
- Manajemen tambalan
- Manajemen Identitas & Acess
- Kesadaran keamanan
- Manajemen Penyedia Keamanan
Dan lainnya.
Kami tidak akan mempertimbangkan spesies yang tercantum dalam artikel, tepuk tangan.
Ada banyak dari mereka, dan manfaatnya bervariasi tergantung pada ukuran organisasi, jenis aset dan kekritisannya.
Kami akan berbicara tentang proses yang akan menguntungkan bahkan bisnis kecil.
Dari toko online dengan ratusan ribu rubel pendapatan, hingga perusahaan besar dengan puluhan pusat data.
Deteksi Kerentanan
Untuk memahami apa yang bisa kita lakukan, mari kita lihat diri kita melalui mata seorang penyerang.
Analisis keamanan terdiri dari beberapa tahap. Untuk setiap tahap saya akan memberikan satu set utilitas dasar yang dapat Anda gunakan.
- Mengumpulkan informasi tentang IP, domain, dan subnet mana yang menjadi tujuan kami. Daripada mengetuk pintu depan, lebih baik mencari titik masuk yang kurang aman.
dnsrecon, Fierce, Censys, reverse-PTR-lookup.
- Analisis layanan untuk kerentanan yang dikenal (CVE). Eksploitasi publik adalah hal biasa bagi mereka.
Vulners, exploit-DB, NIST, CVEdetails
- Analisis layanan untuk kata sandi yang lemah.
potator, hydra
- Analisis kerentanan aplikasi web
Zap, Burp, w3af, Arachni
Keren
Oke keren Kami memiliki cara dan alat untuk memeriksa 1 situs.
Diperlukan beberapa hari untuk memeriksa + menganalisis satu layanan, untuk mengetahuinya secara menyeluruh - seminggu atau lebih.
Tidak keren
Masalahnya adalah kita mungkin memiliki lebih dari satu layanan. Dan misalnya / 20 subnet.
4096 alamat. Masing-masing dapat memiliki 65535 layanan. Tidak keren.
Ya, ada solusi otomatis. Qualys, Acunetix, Nessus, ada vendor dalam negeri. Analisis apa yang baik dan buruk, saya mengusulkan untuk pergi ke artikel lain.
Mereka tidak menyelesaikan masalah saya. Saya memutuskan bahwa saya perlu memperbaikinya. Dia berhenti dari pekerjaannya dan selama sekitar satu tahun dia dan kawan-kawan saya pergi untuk pengembangan.
Cara menulis pemindai kerentanan
Mari kita mulai dengan persyaratan untuk sistem yang ingin kita dapatkan:
- Melakukan pengintaian dan menempatkan domain target dan ip
- Monitor perimeter jaringan. Dia melihat ketika alamat baru muncul di kisaran atau subdomain muncul di situs yang dilindungi
- Secara konstan memeriksa alamat, melihat kapan port jaringan membuka dan menutup
- Menemukan kerentanan dan eksploitasi banner / CPE yang terkenal
- Mengambil kata sandi yang lemah
- Menemukan kesalahan konfigurasi aplikasi dan OS
- Menemukan kerentanan dalam CMS dan plugin mereka
- Secara interaktif menemukan XSS, SQLi, XXE, RCE, LFI, RFI dan OWASP ke 10 yang dapat dicari secara otomatis
- Dia melakukan ini lebih dari sekali, tetapi terus-menerus memeriksa sumber daya saya dan bereaksi jika kerentanan baru muncul
Pengguna adalah pemilik rentang jaringan besar, yaitu mereka yang memiliki 10 atau lebih aplikasi web.
Hal ini diperlukan untuk menyediakan pemindaian paralel harian untuk kerentanan web, kata sandi yang lemah, kesalahan konfigurasi dan menunjukkan eksploitasi keluar untuk ratusan ip dan situs web.
Untuk melakukan ini, gunakan sistem yang dapat diskalakan secara horizontal. Anda dapat menambahkan node baru dan tipe scanner baru ke sana dengan cepat. Sekarang pemindai menggunakan 7 node dan dibagi menjadi 2 lokasi yang saling berinteraksi di Jerman dan Amerika Serikat. Jika tertarik, kami akan menulis tentang ini di artikel lain.
Kami berpikir tentang cara menulis pemindai seperti itu. Kami menyadari bahwa menulis dari awal sistem seperti itu tidak masuk akal. Untuk itu diperlukan pengalaman dan pemahaman yang luar biasa dari platform yang berbeda, database sidik jari jaringannya sendiri, database CVE-nya sendiri dan eksploitasi untuknya, dan sistem besar yang ditujukan untuk analisis keamanan aplikasi web.
Di mana lisensi produk mengizinkannya, kami memutuskan untuk menggunakan pengembangan sumber terbuka. Ada komponen yang sumber tertutup, tetapi gratis untuk penggunaan komersial. Ada beberapa proyek open-source yang ditulis sendiri dan garpu.
Jadi, kami memiliki sekitar 20 aplikasi berbeda, yang merupakan komponen yang diperlukan untuk mencakup level L3-L7 untuk pentest otomatis.
Antarmuka untuk pemindai
Setiap skrip, PoC split atau binary menerima parameter yang berbeda untuk mulai memindai. Sangat tidak nyaman. Saya ingin mendapatkan format terpadu untuk meluncurkan pemindai yang mungkin.
Kami memikirkan tentang apa saja yang perlu diketahui oleh pemindai untuk mengidentifikasi target. Menyusun tabel.
Periksa jenisnya | Masukkan data |
---|
Integrasi dengan basis data exploit dan CVE | Penjual: Produk: Versi (CPE) |
Eksploitasi PoC untuk layanan | IP, port, CVE |
Brutilka | IP, port, protokol lapisan aplikasi |
Pemindai CMS | Port domain |
Pemindai Kerentanan Web | Domain atau Port IP |
Kerentanan Web PoC | URI |
Pemindai port | IP |
Setelah cek nmap awal dan sebuah plugin yang mengakses CVEdetails untuk setiap host, kami mendapatkan satu set objek seperti itu. Kami menyebutnya Metadata.
Representasi JSON:
{ "cves": [], "service": "mysql", "protocol": "tcp", "target": "example.com", "time": "1513941789", "product": "mysql", "vendor": "mysql", "version": "5.1.63-community", "port": 3306, "uri": "" }
Untuk setiap port di Target, kami mendapatkan satu set metadata tersebut. Sekarang Anda perlu memahami pemindai kami mana yang ingin bekerja untuk tujuan ini.
Semua pemindai memiliki induk - ScanManager, yang membuatnya elegan:
product(scanners, metadata_as_list)
Dibutuhkan semua layanan dan untuk masing-masing memeriksa semua kemungkinan pemindai.
Setiap pemindai menyediakan fungsi yang menentukan apakah ia ingin bekerja dengan Target tersebut.
Mari kita bicara tentang apa itu Scanner.
Tiga opsi dipertimbangkan:
- Terapkan setiap pemindai sebagai layanan microser yang mendukung RPC kami
- Terapkan setiap pemindai sebagai layanan dan gunakan bus pesan umum
- Opsi ketiga
Tetapi kami sangat malas dan menyadari bahwa dalam kasus dua opsi pertama, selain pemindai itu sendiri, beberapa infrastruktur lain untuk penyebaran, penulisan RPC, dan penangkap bug dari RPC ini akan dibutuhkan. Plus kami ingin menulis semuanya dengan Python.
Kami mencoba beberapa solusi. Kami melihat proyek manajemen pemindai yang serupa, seperti Yandex Molly dan Minion dari Mozilla. Kami melihat bagaimana w3af, Zap bekerja. Burp memiliki arsitektur plugin yang sangat menarik.
Kami memutuskan bahwa setiap pemindai harus diimplementasikan sebagai fungsi serializable dalam python. Ini akan memungkinkan Anda untuk menyimpannya langsung di rabbit-mq, ββdengan cepat mengirim ke berbagai node, dieksekusi secara atom. Kami dapat menambahkan pemindai baru tanpa harus membuat dan berbagi aplikasi. Bahkan, kami mendapat layanan untuk eksekusi fungsi yang terdistribusi dan tidak sinkron pada python.
Pemindai yang diluncurkan pada platform kami harus berupa objek yang diwarisi dari kelas dasar Pemindai.
Setiap pemindai harus menerima objek tipe Metadata sebagai input dan mengembalikan objek tipe Kerentanan.
class Scanner(object): name = "scanner_base" vuln_type = "default_vuln_type" user_options = {} Vulnerability_body_fields_to_web_interface = [] def __init__(self, opts, target, metadata): self.metadata = metadata self.opts = opts self.target = target @staticmetod def circuit(Metadata): ''' . Metadata. CVE. ''' return [Vulnerability(), Vulnerability()] def check_start_condition(self): ''' , Target True, . False. ''' return True class ScannerError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value)
Tugas selanjutnya yang kami hadapi adalah membuat format terpadu di mana kami dapat menyimpan hasil dari setiap pemindai. Baik itu pemanen web, direktori brutilka atau eksploitasi PoC memcached.
Kami memutuskan untuk tidak memagari format kami sendiri, tetapi untuk menggunakan standar industri - format CVE. Kami memperkaya CVE dengan metadata kerentanan kami untuk penyimpanan dan pengambilan yang mudah. Untuk menyimpan data khusus pemindai, tambahkan bidang tubuh. Kunci dari tubuh mana yang harus ditampilkan di antarmuka web ditentukan oleh Pemindai.
class Vulnerability(object): ''' body . ''' def __init__(self, target, port, scanner, text, VulnerabilityTypes, Score, protocol, UpdateDate=None, scan_date=None, Complexity=None, Access=None, CWEID=None, Authentication=None, Integ=None, PublishDate=None, Conf=None, ofExploits=0, Avail=None, CVEID=None, references=None, GainedAccessLevel=None, false_positive=False, fixed=None, body=None): scan_date = scan_date if scan_date is not None else calendar.timegm(gmtime()) references = references or [] body = body or {} self.name = self.construct_cve_name(VulnerabilityTypes, protocol, target, port, credentials, uri, params) self.data = { "target" : target, "port" : int(port), "Scanner": scanner, "Scan_date": scan_date, "Name": name, "UpdateDate": UpdateDate, "VulnerabilityTypes": VulnerabilityTypes, "Complexity": Complexity, "text": text, "Access": Access, "CWEID": CWEID, "Hash": sha1(self.name.encode('utf-8')).hexdigest(), "Authentication": Authentication, "Integ": Integ, "PublishDate": PublishDate, "Conf": Conf, "ofExploits": ofExploits, "Score": Score, "Avail": Avail, "CVEID": CVEID, "References": references, "GainedAccessLevel": GainedAccessLevel, "FalsePositive": false_positive, "Fixed": fixed, "Body": body } @staticmethod def construct_cve_name(VulnerabilityTypes, protocol, target, port, credentials, uri, params):
Kami mencoba memberi kebebasan maksimum kepada para pemindai dalam penerapannya.
Dan kami mengundang Anda untuk berpartisipasi dalam pengembangan.
Cara menghasilkan uang dari eksploitasi.
Kami ingin orang-orang yang tertarik pada keamanan, penulis utilitas dan skrip, peneliti memiliki kesempatan untuk benar-benar memonetisasi hasil pekerjaan mereka.
Pemindai disebut METASCAN. Jika Anda memiliki skrip sendiri atau eksploitasi PoC 1 hari, atau mungkin Anda sendiri yang menjadi pembuatnya. Kirimi kami modul dalam format Pemindai ke david.ordyan@metascan.ru!
Kami akan membayar remunerasi kepada penulis modul setiap bulan dan mengumumkan penerimaan modul hingga 30 November.
Kami akan mengujinya dengan menjalankan melalui basis klien kami di lebih dari 2000 situs dan menghitung jumlah deteksi.
Para penulis dari tiga pemindai pertama dengan jumlah kerentanan yang ditemukan akan menerima:
- 31 337 rubel untuk tempat pertama.
- 13.370 rubel untuk tempat ke-2 dan ke-3.
Dan juga kami akan menawarkan kami akan menawarkan mereka untuk menyelesaikan kontrak dan menerima hadiah untuk menggunakan scanner mereka setiap bulan, sampai mereka menemukan kerentanan.
Setelah November, kami akan memperluas program untuk menerima pemindai.
Menulis ke david.ordyan@metascan.ru atau TG https://t.me/METASCAN
BB8E 3D9B 04FF 70C9 A260 CD45 E0BF 4EB4 9838 A7EC
Contoh dan kode akan muncul di sini