Daftar Isi:
- Jangan membuat asumsi tentang masukan pengguna
- Menangani Kegagalan dengan Gracefully
- Pertahankan Log Program
- Ikuti proses perkembangan yang baik
- Melaksanakan kontrol versi yang baik
- Mengautentikasi pengguna dengan aman
- Mengelola sesi jarak jauh
- Obfuscate your code
- Tandatangani kode Anda dengan sertifikat digital
- Gunakan enkripsi yang aman dimanapun diperlukan
Video: Hacking Livestream #8: RE tips 2024
Sebagai programmer C ++, Anda perlu mempelajari hal-hal yang harus Anda lakukan di kode C ++ untuk menghindari penulisan program yang rentan terhadap peretasan. Ada juga yang menjelaskan fitur yang dapat Anda aktifkan jika sistem operasi Anda mendukungnya, seperti Address Space Layout Randomization (ASLR) dan Data Execution Prevention (DEP).
Jangan membuat asumsi tentang masukan pengguna
Visi terowongan programer tidak masalah selama tahap pengembangan awal. Namun, di beberapa titik, programmer (atau, lebih baik lagi, programmer lain yang tidak berhubungan dengan pengembangan kode) perlu duduk dan melupakan masalah segera. Dia perlu bertanya pada dirinya sendiri, "Bagaimana reaksi program ini terhadap masukan ilegal? "
Berikut adalah beberapa aturan untuk memeriksa masukan:
-
Jangan membuat asumsi tentang panjang masukan.
-
Jangan menerima masukan lebih banyak daripada yang Anda punyai untuk penyangga fixed-length (atau gunakan buffer ukuran variabel).
-
Periksa kisaran setiap nilai numerik untuk memastikannya masuk akal.
-
Periksa dan saring karakter khusus yang mungkin digunakan oleh hacker untuk menyuntikkan kode.
-
Jangan melewati input mentah ke layanan lain, seperti server database.
Dan lakukan semua pemeriksaan yang sama terhadap nilai yang dikembalikan dari layanan jarak jauh. Peretas mungkin tidak berada di sisi input, dia mungkin berada di sisi respon.
Menangani Kegagalan dengan Gracefully
Program Anda harus merespons kegagalan yang terjadi dalam program. Misalnya, jika panggilan Anda ke fungsi perpustakaan mengembalikan program nullptr, harus mendeteksi ini dan melakukan sesuatu yang masuk akal.
Wajar di sini harus dipahami dengan adil. Program tidak perlu mengendus sekitar untuk mencari tahu persis mengapa fungsinya tidak mengembalikan alamat yang masuk akal. Bisa jadi permintaan itu terlalu banyak mengingat masukan yang tidak masuk akal. Atau bisa juga konstruktor mendeteksi beberapa jenis input ilegal.
Tidak masalah. Intinya adalah bahwa program tersebut harus mengembalikan keadaannya sebaik mungkin dan menyiapkan bit input berikutnya tanpa menabrak atau merusak struktur data yang ada seperti heap.
Pertahankan Log Program
Buat dan pertahankan runtime log yang memungkinkan seseorang untuk merekonstruksi apa yang terjadi jika terjadi kegagalan keamanan. (Sebenarnya, ini sama nyatanya jika terjadi jenis kegagalan). Misalnya, Anda mungkin ingin masuk setiap kali ada orang masuk atau keluar dari sistem Anda.
Anda pasti ingin tahu siapa yang masuk ke sistem Anda saat terjadi peristiwa keamanan - inilah kelompok yang paling berisiko mengalami kerugian keamanan dan siapa yang paling curiga saat mencari penjahat.Selain itu, Anda pasti ingin mencatat kesalahan sistem apa pun yang mencakup sebagian besar pengecualian.
Program produksi dunia nyata berisi sejumlah besar panggilan yang terlihat seperti berikut:
log (DEBUG, "User% s memasukkan kata sandi hukum", sUser);
Ini hanyalah sebuah contoh. Setiap program membutuhkan beberapa jenis fungsi log. Entah itu benar-benar disebut log () tidak penting.
Ikuti proses perkembangan yang baik
Setiap program harus mengikuti proses pembangunan formal yang dipikirkan dengan baik. Proses ini setidaknya harus mencakup langkah-langkah berikut:
-
Mengumpulkan dan mendokumentasikan persyaratan, termasuk persyaratan keamanan.
-
Tinjau desainnya.
-
Mematuhi standar pengkodean.
-
Uji di bawah unit
-
Lakukan tes penerimaan formal yang didasarkan pada persyaratan awal.
Selain itu, tinjauan sejawat harus dilakukan pada poin-poin kunci untuk memastikan bahwa persyaratan, desain, kode, dan prosedur pengujian berkualitas tinggi dan sesuai dengan standar perusahaan.
Melaksanakan kontrol versi yang baik
Kontrol versi adalah hal yang aneh. Wajar jika tidak khawatir tentang versi 1. 1 saat Anda berada di bawah pistol untuk mendapatkan versi 1. 0 keluar dari pintu dan masuk ke tangan pengguna yang terulur. Namun, kontrol versi merupakan topik penting yang harus diatasi sejak dini karena harus dibangun ke dalam desain awal program dan tidak dilesat nantinya.
Salah satu aspek kontrol versi yang hampir sepele adalah mengetahui versi program yang digunakan pengguna. Saat pengguna menelepon dan berkata, "Lakukan ini saat saya mengekliknya," help desk benar-benar perlu mengetahui versi program yang digunakan pengguna. Dia bisa saja menggambarkan sebuah masalah dalam versinya yang sudah diperbaiki dalam versi saat ini.
Mengautentikasi pengguna dengan aman
Otentikasi pengguna harus mudah dilakukan: Pengguna memberikan nama akun dan kata sandi, dan program Anda menampilkan nama akun di tabel dan membandingkan kata sandinya. Jika kata kunci cocok, pengguna diautentikasi. Tapi ketika sampai pada antihacking, tidak sesederhana itu.
Pertama, jangan pernah menyimpan kata sandinya sendiri di database. Ini disebut menyimpannya dalam bentuk yang jelas dan dianggap sangat buruk. Terlalu mudah bagi hacker untuk mendapatkan file passwordnya. Sebagai gantinya, simpan sebuah transform aman dari kata sandi.
Mengelola sesi jarak jauh
Anda dapat membuat asumsi tertentu saat semua aplikasi Anda berjalan di satu komputer. Untuk satu hal, begitu pengguna mengotentikasi dirinya sendiri, Anda tidak perlu khawatir tentang dia berubah menjadi orang yang berbeda. Aplikasi yang berkomunikasi dengan server jauh tidak bisa membuat asumsi ini - hacker yang sedang mendengarkan di telepon bisa menunggu sampai pengguna mengotentikasi dirinya dan kemudian membajak sesi.
Apa yang dapat dilakukan programmer yang berpikiran keamanan untuk menghindari situasi ini? Anda tidak ingin berulang kali meminta user untuk kata sandinya hanya untuk memastikan koneksi belum dibajak. Solusi alternatifnya adalah membangun dan mengelola sesi . Anda melakukan ini dengan meminta server mengirim aplikasi remote cookie sesi setelah pengguna berhasil mengotentikasi dirinya sendiri.
Obfuscate your code
Code obfuscation adalah tindakan membuat executable sulit dipahami hacker.
Logikanya sederhana. Semakin mudah bagi seorang hacker untuk memahami bagaimana kode Anda bekerja, semakin mudah bagi si hacker untuk mengetahui kerentanannya.
Langkah termudah tunggal yang dapat Anda lakukan adalah memastikan bahwa Anda hanya mendistribusikan versi Release program Anda yang tidak menyertakan informasi simbol debug. Saat pertama kali membuat file proyek, pastikan untuk memilih bahwa Debug dan versi Release harus dibuat.
Jangan sekali-kali mendistribusikan versi aplikasi Anda dengan informasi simbol yang disertakan.
Tandatangani kode Anda dengan sertifikat digital
Penandatanganan kode bekerja dengan menghasilkan hash yang aman dari kode yang dapat dieksekusi dan menggabungkannya dengan sertifikat yang dikeluarkan oleh otoritas sertifikat yang valid. Prosesnya berjalan seperti ini: Perusahaan yang menciptakan program harus terlebih dahulu mendaftarkan diri dengan salah satu otoritas sertifikat.
Setelah otoritas sertifikat yakin bahwa Perusahaan saya adalah entitas perangkat lunak yang valid, itu akan menerbitkan sertifikat. Ini adalah nomor panjang yang dapat digunakan siapa pun untuk memverifikasi bahwa pemegang sertifikat ini adalah Perusahaan Nyata saya yang terkenal di San Antonio.
Gunakan enkripsi yang aman dimanapun diperlukan
Seperti peringatan bagus, peringatan ini memiliki beberapa bagian. Pertama, "Gunakan enkripsi dimanapun diperlukan. "Hal ini cenderung mengingatkan pikiran untuk mengkomunikasikan informasi rekening bank melalui Internet, namun Anda harus berpikir lebih umum dari itu.
Data yang dikomunikasikan, baik melalui Internet atau beberapa rentang yang lebih kecil, dikenal umumnya sebagai Data in Motion. Data in Motion harus dienkripsi kecuali tidak berguna bagi hacker.
Data yang tersimpan di disk dikenal sebagai Data saat Istirahat. Data ini juga harus dienkripsi jika ada kemungkinan disk hilang, dicuri, atau disalin. Bisnis secara rutin mengenkripsi hard disk di laptop perusahaan mereka jika ada laptop yang dicuri di pemindai keamanan di bandara atau ditinggalkan di taksi di suatu tempat.
Perangkat penyimpanan portabel kecil seperti thumb drive sangat rentan tersesat - data pada perangkat ini harus dienkripsi.