
Tentunya Anda telah mendengar ungkapan "mengayuh" lebih dari sekali, dan saya yakin Anda tidak akan menolak untuk menghasilkan beberapa ratus (atau bahkan ribuan) dolar jika Anda menemukan kerentanan potensial dalam program orang lain. Pada artikel ini, saya akan berbicara tentang trik yang akan membantu penelitian proyek open source untuk kerentanan semacam itu.
Bug Bounties pada Perangkat Lunak Bebas dan Sumber Terbuka - apakah itu?
Bug Bounty adalah nama umum untuk berbagai program di mana pengembang situs web dan perangkat lunak menawarkan hadiah tunai untuk menemukan bug dan kerentanan. Selain program Bug Bounty yang sangat terkenal dari perusahaan besar seperti Apple atau Microsoft, ada juga program untuk menemukan kerentanan dalam proyek sumber terbuka.
Banyak dari mereka dapat ditemukan di HackerOne, tetapi mungkin yang terbesar adalah FOSSA - Audit Perangkat Lunak Bebas dan Sumber Terbuka. Ini adalah program penelitian kerentanan yang disponsori oleh Uni Eropa untuk berbagai proyek sumber terbuka. Kumpulan hadiah total adalah jumlah yang mengesankan - sebanyak 850.000 euro!
Bagaimana cara berpartisipasi?
Pertama, Anda perlu mendaftar di
HackerOne . Kami akan membutuhkan proyek-proyek yang bersifat open source. HackerOne memiliki
daftar lengkap .
Jika ada keinginan untuk berpartisipasi dalam Bug Bounty dari Uni Eropa - daftar proyek yang berpartisipasi dalam program ini dapat ditemukan di
sini . Untuk sebagian besar proyek, itu akan cukup untuk didaftarkan di HackerOne, tetapi banyak program yang tercantum dalam daftar itu ada di intigriti.com.
Untuk mengambil bagian, Anda perlu memilih proyek yang cocok untuk Anda sendiri, dan kemudian membaca dengan cermat kondisi partisipasi. Jika mereka memuaskan Anda, maka sekarang saatnya untuk berlatih.
Untuk menemukan kerentanan dan mendapatkan uang Anda, Anda hanya perlu mengunduh proyek (atau mengkloningnya dari GitHub) dan menganalisis dengan hati-hati setiap baris kode, memeriksa setiap ekspresi untuk kemungkinan kesalahan. Jika Anda menemukan sesuatu yang dapat memengaruhi keamanan program - tulis dalam laporan dan kirimkan ke pengembang. Jika mereka menilai temuan Anda layak promosi - uang Anda ada di saku Anda :).
Tunggu, dimana ringannya?
Dan kemudahannya adalah tidak perlu menganalisis kode secara eksklusif secara manual. Ada alat untuk mencari kesalahan dalam kode dalam mode otomatis. Misalnya, penganalisa kode statis. Saya lebih suka menggunakan pengembangan kami -
PVS-Studio . Alat analisa PVS-Studio dapat menemukan kesalahan dalam kode yang ditulis dalam C ++, C # dan Java, dan juga memiliki antarmuka yang nyaman. Selain itu, ada
beberapa opsi untuk penggunaan gratis. Ada juga banyak
penganalisa kode lainnya .
Tentu saja, penganalisa statis dapat mendeteksi jauh dari semua kesalahan. Ya, dan Tuhan memberkati mereka! Lagi pula, tujuan kami adalah menemukan kesalahan dengan cepat dan mudah, dan bukan untuk menemukan semuanya.
Setelah proyek diunduh dan dirakit, cukup membuat hanya beberapa klik untuk memulai analisis. Hasilnya akan berupa laporan dengan sejumlah (biasanya banyak) peringatan yang dihasilkan oleh penganalisa. Di PVS-Studio mereka diklasifikasikan menjadi tiga tingkat kepercayaan. Anda harus mulai dengan peringatan tingkat pertama, sehingga tingkat oranye dan kuning dapat disaring dari hasil analisis.
Contoh hasil analisis penyaringan.
Dengan demikian, tetap hanya untuk meninjau peringatan yang tersisa dan memilih dari mereka tempat-tempat yang mungkin merupakan bahaya terbesar. Penting untuk memeriksa apakah mungkin untuk mereproduksi salah satunya secara langsung selama pengoperasian program. Jika Anda berhasil melakukan ini, itu tidak hanya akan meningkatkan kemungkinan bahwa pengembang akan menerima laporan, tetapi juga akan meningkatkan jumlah pembayaran. Dalam hal ini, visibilitas adalah teman terbaik Anda.
Perlu juga dipertimbangkan apakah kesalahan yang ditemukan memengaruhi keamanan program. Memang, dalam hal ini, jumlah yang dibayarkan kepada Anda akan beberapa kali lebih besar :)
Tangkapan layar menunjukkan antarmuka Visual Studio. Namun, jangan terkecoh dengan ini. Alat analisis dapat digunakan tidak hanya sebagai plug-in untuk Visual Studio, tetapi juga secara mandiri, termasuk di
Linux dan macOS .
Kelebihan dari pendekatan ini
Pertama, menggunakan penganalisa statis adalah salah satu cara termudah untuk menemukan kesalahan. Untuk menggunakan penganalisa kode, sama sekali tidak perlu memiliki pengetahuan khusus: Anda hanya perlu memahami bahasa di mana kode yang diuji ditulis.
Kedua, analisanya berhati-hati. Mereka tidak lelah dan tidak kehilangan kewaspadaan, tidak seperti seseorang. Oleh karena itu, dengan menggunakannya, Anda dapat menganalisis basis kode besar yang sewenang-wenang dengan biaya yang hampir minimal.
Ketiga, analis sering memiliki lebih banyak pengetahuan daripada seseorang. Apa artinya ini? Biarkan saya menjelaskan ide saya pada contoh kode dari kernel Android:
static void FwdLockGlue_InitializeRoundKeys() { unsigned char keyEncryptionKey[KEY_SIZE]; .... memset(keyEncryptionKey, 0, KEY_SIZE);
Tampaknya di mana ada kesalahan?
Ternyata kompiler, melihat bahwa array
keyEncryptionKey tidak digunakan di tempat lain, dapat mengoptimalkan kode dan menghapus panggilan fungsi
memset dari itu. Dan dia akan melakukan ini hanya selama perakitan dalam konfigurasi rilis. Semuanya akan baik-baik saja, tetapi hanya kunci enkripsi yang akan tetap tidak terkunci dalam RAM untuk beberapa waktu, sehingga dapat diperoleh oleh penyerang. Lubang keamanan nyata!
Lagi pula, menemukan kesalahan ini sendiri hampir tidak mungkin: dalam mode debug, panggilan
memset berfungsi dengan baik. Dan Anda tidak akan menulis tes apa pun untuk ini ... Tetap hanya untuk mengetahui tentang fitur ini dan mengingatnya sendiri.
Tetapi bagaimana jika para pengembang proyek tidak tahu tentang fitur ini? Bagaimana jika Anda tidak tahu tentang fitur ini saat mencari bug? Ini tidak penting bagi penganalisa, karena ia memiliki diagnostik
V597 , oleh karena itu, ketika melihat laporan, Anda pasti akan mengetahuinya.
Akhirnya, keempat. Salah satu manfaat paling bermanfaat menggunakan analisis statis saat mengejar Bug Bounty adalah kecepatan. Ya, dengan itu Anda dapat memeriksa dua, tiga, empat proyek di malam hari - tetapi tidak semuanya.
Yang terpenting, Anda bisa menjadi yang pertama. Sementara hadiah ditawarkan untuk menemukan bug dalam proyek apa pun, proyek terus diselesaikan dan dikembangkan. Pengembang meluncurkan rilis baru dan fitur baru, dan dengan mereka datang kode baru dan ruang terbuka baru untuk kesalahan. Dengan menggunakan pendekatan yang saya jelaskan, akan mungkin untuk secara akurat memeriksa kesalahan baru dan kerentanan potensial pada hari pertama publikasi mereka.
Kerentanan potensial
Pembaca yang penuh perhatian mungkin bingung:
Berhenti, berhenti! Di satu sisi, ini merujuk pada pencarian kode untuk kesalahan dalam program, di sisi lain, kerentanan potensial disebutkan. Selain itu, kerentanan lebih menarik dari sudut pandang Bug Bounty. Mohon klarifikasi!Faktanya adalah bahwa kesalahan dan potensi kerentanan pada dasarnya adalah hal yang sama. Tentu saja, hanya beberapa kesalahan / kerentanan potensial dalam penelitian lebih lanjut yang dapat berubah menjadi kerentanan nyata. Namun, kesalahan yang tidak berbahaya dan kerentanan serius mungkin terlihat persis sama dalam kode. Artikel "
Bagaimana PVS-Studio dapat membantu dalam menemukan kerentanan? " Menyajikan beberapa kesalahan (pada pandangan pertama biasa), yang sekarang dikenal sebagai kerentanan.
Omong-omong, menurut laporan Institut Standar dan Teknologi Nasional (NIST), sekitar 64% kerentanan dalam aplikasi dikaitkan dengan kesalahan perangkat lunak, dan bukan dengan defisiensi keamanan (bukan kurangnya fitur keamanan).
Jadi, percaya diri mengambil PVS-Studio dan mulai mencari kesalahan dan cacat keamanan! Ngomong-ngomong, klasifikasi peringatan menurut
CWE akan membantu Anda dalam hal ini.
Kesimpulan
Saya harap saya membantu pembaca dalam menemukan bug yang akan memberinya sedikit pengakuan dan imbalan uang. Saya yakin bahwa analisis statis akan membantu mereka dalam hal ini! Ingatlah bahwa pengembang, sebagai aturan, tidak punya waktu untuk analisis terperinci dari kesalahan yang ditemukan, jadi Anda masih harus membuktikan bahwa temuan Anda benar-benar dapat memengaruhi program. Cara terbaik adalah memvisualisasikannya. Dan ingat: semakin kuat bug dalam kode dapat melanggar keamanan, semakin mereka akan membayar untuk itu.
Itu mungkin saja. Semoga berhasil menemukan hadiahmu!

Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: George Gribkov.
Cara Mudah Menghasilkan Uang dari Bug Bounty .