Anda disewa untuk memperbaiki bug kecil untuk situs intensif keamanan. Melihat kode, itu penuh dengan lubang keamanan. Apa yang kamu kerjakan? [Tutup]

109

Saya telah disewa oleh seseorang untuk melakukan pekerjaan kecil di sebuah situs. Ini situs untuk perusahaan besar. Ini berisi data yang sangat sensitif, jadi keamanan sangat penting. Setelah menganalisis kode, saya perhatikan itu dipenuhi dengan lubang keamanan - baca, banyak file PHP yang melemparkan input pengguna / posting langsung ke permintaan mysql dan perintah sistem.

Masalahnya adalah, orang yang membuat situs untuknya adalah seorang programmer dengan keluarga dan anak-anak yang bergantung pada pekerjaan itu. Saya tidak bisa mengatakan: "situs Anda adalah taman hiburan naskah anak-anak. Biarkan saya mengulanginya untuk Anda dan Anda akan baik-baik saja."

Apa yang akan kamu lakukan dalam situasi ini?

Memperbarui:

Saya mengikuti beberapa saran bagus di sini dan dengan sopan melaporkan kepada pengembang bahwa saya telah menemukan beberapa kemungkinan kelemahan keamanan di situs. Saya menunjukkan garis dan mengatakan mungkin ada kerentanan untuk serangan injeksi SQL di sana, dan bertanya apakah dia tahu tentang hal itu. Dia menjawab: "tentu, tapi saya pikir untuk mengeksploitasinya penyerang harus memiliki informasi tentang struktur database; saya harus mengerti lebih baik" .

Pembaruan 2:

Saya mengatakan bahwa tidak selalu demikian dan menyarankan agar ia mengikuti tautan pertanyaan Stack Overflow ini untuk menanganinya dengan benar: Bagaimana mencegah injeksi SQL dalam PHP? Dia mengatakan akan mempelajarinya dan mengucapkan terima kasih karena telah memberitahunya sebelumnya. Saya kira bagian saya selesai, terima kasih kawan.

Viktor Maia
sumber
29
Saya benar-benar menikmati solusi yang tidak melibatkan penghancuran hidup seseorang. Saya akan meninggalkan ini sendirian, tetapi saya juga tahu lubang keamanan seperti itu juga dapat merusak kehidupan beberapa orang. Rumit.
MaiaVictor
18
Penyerang dapat menggunakan exploit untuk mendapatkan informasi tentang struktur database. Tidak ada kerentanan injeksi SQL yang dapat diremehkan.
Dave Rager
17
Tunjukkan padanya bagaimana cara mengeksploitasi beberapa kerentanan tanpa menggunakan pengetahuan basis data. Itu akan menakuti dia.
Euforia
74
Saya hanya ingin mengatakan pekerjaan yang baik untuk mencari orang / programmer lain yang tidak Anda kenal. Itu tidak membuatnya menjadi hal yang buruk untuk menghancurkan mata pencaharian mereka karena mereka melakukan kesalahan dan Anda tidak mengenal mereka, dan saya memuji Anda karena memperhitungkannya.
Baja
8
@Dokkat Masalahnya adalah salah satu keseimbangan. Dari sudut pandang seorang programmer, programmer berkualitas rendah dengan seorang istri dan anak telah benar-benar membahayakan perusahaan, dan dengan demikian pekerjaan banyak karyawan dengan istri dan anak-anak. Juga, masalah ini sering dipersulit oleh masalah emosional "programmer yang buruk melakukan sesuatu yang membuat hidup saya lebih sulit. Sekarang saya harus kehilangan menghabiskan waktu bersama keluarga saya. Mereka lebih penting bagi saya daripada dia. Ini sepertinya tidak adil. " Itu tanggapan yang tidak masuk akal, tetapi orang-orang menjadi orang.
deworde

Jawaban:

114

Pertama dan terutama di sini, prioritasnya adalah untuk menutup lubang keamanan.

Jika Anda bekerja secara langsung dengan insinyur yang menulis ini, dokumentasikan semuanya dan berikan kepada insinyur itu.

Jika tidak, beri tahu atasan Anda bahwa masalah keamanan lebih besar dari yang diperkirakan sebelumnya dan bahwa situs tersebut membutuhkan banyak pekerjaan. Mintalah untuk bekerja dengan pengembang utama yang ada di situs, dan tawarkan untuk mengajari mereka tentang keamanan PHP (jangan berjanji untuk membuat orang tersebut ahli, tetapi tawarkan untuk melatih mereka dalam segala hal yang Anda ketahui) sehingga orang tersebut dapat mengambil alih setelah selesai.

Jangan jadikan ini masalah "orang ini jahat, tembak dia". Dekati dari perspektif "Hei, saya menemukan beberapa bug potensial yang perlu diperbaiki stat, yang tampaknya berasal dari beberapa ketidaktahuan / kesalahpahaman umum tentang keamanan situs. Saya juga ingin berbicara dengan pengembangan Anda sehingga kami dapat meningkatkan situs Anda dan mudah-mudahan menghindari lebih banyak masalah ini di masa depan. "

Eric Hydrick
sumber
1
Jawaban yang bagus secara keseluruhan. Topiknya subjektif, jadi saya akan menandai topik Anda karena itu yang paling diterima oleh komunitas.
MaiaVictor
1
Jika Anda bekerja dengan insinyur, tetapi dibayar oleh manajemen, tidakkah Anda harus melaporkan kepada manajemen? Bagaimana jika insinyur mengucapkan terima kasih, tetapi begitu Anda pergi, menghancurkan laporan?
Konerak
Baik memberi tahu keduanya, atau memberi tahu insinyur terlebih dahulu, dan memverifikasi bahwa bug sedang dibuat dan dilacak dalam sistem apa pun yang mereka gunakan. Jika bug tidak dibuat, beri tahu manajemen.
Eric Hydrick
2
Saya menyukai jawaban ini dengan lebih baik: programmers.stackexchange.com/a/189206/28351 , karena untuk majikan prioritasnya berbeda. Pertama laporkan lubang keamanan, lalu perbaiki bug kecil.
nalply
80

Ada perbedaan antara ketidaktahuan dan ketidakmampuan. Ada saat ketika Anda tidak tahu apa itu injeksi SQL, dan tidak ada alasan untuk percaya programmer asli tidak mampu memperbaiki masalah setelah dia mengetahui masalah tersebut.

Jadi, beri tahu mereka. Jadilah spesifik dan obyektif, dan sediakan diri Anda untuk menjawab pertanyaan, berikan contoh eksploitasi, dan rekomendasi untuk perbaikan. Jika mereka masih belum mengerti setelah itu, hal yang paling bisa Anda lakukan adalah tidak menaruh informasi pribadi Anda di situs.

Karl Bielefeldt
sumber
26
+1. Ketidaktahuan bisa diperbaiki. Ketidakmampuan adalah karier bagi sebagian orang!
Mitch Wheat
20

Pekerjaan Anda bukan untuk mengulangi situs untuknya. Ini untuk memperbaiki bug kecil. Namun, jika Anda telah memperhatikan masalah keamanan yang harus diperbaiki, Anda dapat membawanya ke pemilik situs dan menawarkan wawasan tentang apa masalahnya.

Jangan mencaci maki atau berbicara negatif tentang pengembang asli atau mengomentari betapa mengerikan kode itu. Bersikap hormat dan profesional. Anda dapat menawarkan untuk bekerja dengan pengembang untuk menyelesaikan masalah. Jangan mencoba memperbaikinya sendiri atau menawarkan solusi kecuali Anda telah dikontrak untuk mengatasi masalah tersebut. Jika mereka mengikuti saran Anda dan Anda salah, mereka bisa membalas Anda.

Dave Rager
sumber
17

Pertama dan terpenting - perbaiki hal yang mereka pekerjakan untuk Anda. Jika Anda tidak melakukannya, maka Anda akan dianggap sebagai tipe konsultan yang tertarik untuk membuat lebih banyak pekerjaan untuk diri mereka sendiri, daripada menyelesaikan pekerjaan.

Seiring dengan perbaikan, Anda perlu memberi mereka daftar hal-hal yang Anda perhatikan salah dari sudut pandang keamanan, dan mengapa hal-hal ini salah.

Michael Kohne
sumber
13

Tidak ada gunanya bagi siapa pun untuk tidak melaporkan masalah tersebut. Jika Anda memiliki tugas tertentu, Anda disewa untuk menyelesaikannya tetapi mendokumentasikan masalah keamanan lainnya saat Anda melihatnya dan melaporkannya ke individu yang sesuai, mungkin individu yang Anda laporkan untuk tugas yang Anda pekerjakan.

Ini adalah situasi di mana soft skill yang kuat akan berguna karena untuk menangani ini dengan kebijaksanaan tidak akan memerlukan meletakkan pekerjaan yang dilakukan oleh orang lain di situs dan tidak membuat pengembang merasa seolah-olah Anda mempertanyakan bakatnya.

Jelas menghindari kata-kata seperti "omong kosong, buruk, miskin, membingungkan" ketika merujuk pada kode / kekurangan dan kata-kata serupa untuk pengembang yang menulis situs.

Rig
sumber
4
Saya akan menambahkan: pastikan pengembang menyadari betapa parahnya kelemahan dan bagaimana mereka dapat dieksploitasi. Meluangkan waktu untuk meluncurkan 'serangan' terkontrol pada mesin lokal dengan kehadiran pengembang ini dapat melakukan banyak hal untuk mendidiknya tentang masalah, yang membuat Anda memiliki celah untuk menyarankan cara untuk mengeraskan kode.
Andrew Gray
7

Selain jawaban lain yang mungkin ingin Anda lakukan adalah mengarahkan pengembang pada beberapa sumber tentang seberapa mudah masalah injeksi SQL dapat dieksploitasi, misalnya sqlmap yang merupakan alat eksploitasi SQL Injection otomatis.

Apa yang saya temukan efektif dalam menunjukkan keseriusan masalah semacam ini di masa lalu adalah menunjukkan apa yang dapat dilakukan dengannya, jadi jika Anda menjalankan sesuatu seperti itu terhadap dev. salinan situs untuk menunjukkannya mengekstraksi data dll. Anda mungkin meyakinkan mereka tentang keseriusannya.

Rоry McCune
sumber
4
Sadarilah ini memiliki beberapa risiko, karena Anda dapat dibuat tampak seperti "peretas". Orang-orang manajemen tidak perlu memahami istilah-istilah seperti "kerentanan yang ada", "salinan pengembangan" dan "analis keamanan topi putih"
deworde
0

Pertama dan satu-satunya; Manajemen tidak mau mendengar masalah. Saya dipecat dari Kantor Manajemen Personalia (izin keamanan untuk gedung putih) karena saya menunjukkan betapa tidak amannya sistem mereka. Itu beberapa waktu yang lalu, tetapi sikap manajemen tidak berubah.

Atasi masalah dengan pengembang, melalui email sehingga Anda memiliki jejak, lalu berjalan atau lari. Ketika mereka akhirnya memiliki masalah, sebagai kontraktor, mereka akan mencoba menyalahkan Anda, terlepas dari keterlibatan apa pun yang terkait dengan masalah tersebut.

Memiliki masalah yang sama mendasarnya dengan injeksi SQL, menunjukkan bahwa mereka murah ketika mereka awalnya mengembangkan sistem, dan kemungkinan mereka paling murah sekarang. Dapatkan apa yang Anda bisa dari mereka ketika mereka masih dalam bisnis, tetapi mencari pengembangan bisnis di tempat lain.

joe
sumber
3
"Manajemen tidak ingin mendengar masalah" - tambahkan beberapa alasan / referensi untuk mendukung pernyataan Anda (yang kedengarannya masuk akal bagi saya tetapi ini tidak terlalu penting) dan saya akan mencabut downvote
agas