Unit 7 / 11

Semakan Kod Selamat dan Analisis Statik: Mencari Kerentanan dengan Kepintaran Buatan

Keuntungan:

  • Keupayaan untuk menggunakan kecerdasan buatan sebagai mata kedua dan tandakan kelemahan kelas OWASP (suntikan, rahsia keras, kawalan akses) dalam kod dengan memberikan konteks
  • Keupayaan untuk menghapuskan positif palsu yang dihasilkan oleh kecerdasan buatan dengan konteks dan mencegah menganggap setiap penemuan sebagai kelemahan sebenar tanpa mengesahkannya
  • Keupayaan untuk mengenali bahawa pembaikan yang dicadangkan oleh kecerdasan buatan mungkin memperkenalkan kelemahan/pepijat baharu dan melepasi setiap tampung melalui pintu semakan dan ujian

Kerentanan dalam perisian adalah antara kelemahan yang paling mahal kerana ia dibenamkan dalam produk dari awal dan diedarkan kepada berjuta-juta pengguna. Semakan kod selamat ialah proses membaca kod sumber baris demi baris dan menangkap kelemahan — suntikan SQL, kelemahan pengesahan, kata laluan berkod keras, kebenaran yang salah — sebelum ia dikeluarkan. Apabila dilakukan dengan tangan, ia perlahan dan memenatkan; Sangat mudah untuk terlepas kelemahan dalam pangkalan kod yang besar.

AI berkuasa dalam semakan kod atas dua sebab: kod juga merupakan bahasa, dan AI mahir dalam pengecaman corak. AI boleh membenderakan corak berbahaya dengan cepat dalam sekeping kod (meletakkan input pengguna terus ke dalam pertanyaan, storan data tidak disulitkan, tiada pengesahan input), menerangkan sebab setiap satu berisiko dan mencadangkan pembetulan. Tetapi AI tidak melihat keseluruhan konteks operasi kod (input mungkin dikosongkan pada lapisan lain), ia mungkin mencipta kelemahan yang tidak wujud (positif palsu) atau terlepas kelemahan sebenar (negatif palsu), dan yang paling penting, "pembetulan" yang dicadangkannya mungkin memperkenalkan kelemahan atau pepijat baharu. AI ialah mata kedua dan penunjuk dalam semakan kod; Pembangun dan pakar keselamatan memutuskan sama ada penemuan adalah kelemahan sebenar dan sama ada pembetulan itu betul dan selamat.

Langkah-langkah semakan kod

  1. Berikan skop dan konteks. Bahasa mana, rangka kerja mana, di manakah kod ini mengambil input, di mana ia memberikan output, di lapisan mana ia berfungsi? Semakan kod tanpa konteks menghasilkan positif palsu.
  2. Imbas untuk corak berbahaya. Cari kelas kerentanan AI yang diketahui (seperti OWASP Top 10): suntikan, pengesahan, pendedahan data sensitif, kawalan akses.
  3. Minta setiap penemuan berasas. Untuk setiap bendera: baris mana, kelas kerentanan mana, bagaimana ia boleh dieksploitasi, apakah buktinya. Penemuan yang tidak wajar tidak diambil serius.
  4. Hapuskan positif palsu. Adakah input sebenarnya sedang dibersihkan, adakah laluan itu benar-benar boleh diakses — semak dengan konteks.
  5. Sahkan pembetulan. Sahkan bahawa tampung yang disyorkan oleh AI sebenarnya menutup kelemahan, tidak memperkenalkan kelemahan/pepijat baharu dan telah lulus ujian.
  6. Kelulusan manusia. Pembangun + pakar keselamatan menyemak penemuan dan membetulkan; Begitulah cara ia memasuki repositori kod.

Syarat: SAST (Ujian Keselamatan Aplikasi Statik — ujian keselamatan statik yang menganalisis kod sumber tanpa menjalankannya). DAST (Dinamik — ujian dinamik yang menguji aplikasi yang sedang berjalan secara luaran). OWASP Top 10 ialah senarai standard kelemahan aplikasi web yang paling biasa. Suntikan ialah kelemahan yang disebabkan oleh mentafsir input pengguna sebagai arahan/pertanyaan (cth. suntikan SQL). Pertanyaan berparameter ialah kaedah yang betul yang menghalang suntikan dengan mengasingkan input daripada kod.

Jadual kelas kerentanan biasa

Kelas kerentanan

Gejala (dalam kod)

penyelesaian yang betul

perangkap AI

Suntikan SQL

Menyertai input ke dalam pertanyaan

Pertanyaan berparameter

Boleh mengabaikan sanitasi

rahsia berkod keras

Kata laluan/masukkan kod

Peti besi rahsia (bilik kebal), env

Positif palsu (sampel/ujian)

Pengesahan yang lemah

Kawalan hilang/salah

Kawalan berpusat yang berkuasa

terlepas konteks

Kawalan akses yang rosak

Tiada semakan kebenaran

Keizinan sebelah pelayan

Tidak memahami aliran kompleks

Pendedahan data sensitif

Storan/pelogan tanpa kata laluan

Penyulitan, penyamaran

Tidak tahu kritikal

Siri yang tidak selamat

Nyahserialisasi data yang tidak boleh dipercayai

Penghuraian selamat

Rindu corak yang jarang berlaku

tiga kes mini

Kes 1 — Menangkap suntikan sebenar. Seorang pembangun mempunyai AI memeriksa fungsi akses data. AI menandakan baris di mana nilai userId daripada pengguna digabungkan terus ke dalam teks SQL dan mengatakan "ini adalah suntikan SQL klasik, tukarkannya menjadi pertanyaan berparameter"; Menyediakan pembetulan sampel. Pembangun mengesahkan bahawa input belum dibersihkan di tempat lain, mengesahkan bahawa ia adalah kelemahan sebenar, melaksanakan pertanyaan berparameter yang dicadangkan dan menulis ujian. AI menyerlahkan kelemahan; ujian pengesahan dan pembetulan datang daripada pembangun.

Kes 2 — Rahsia tetap positif palsu. AI melihat kata laluan = baris "test1234" dalam fail dan berkata "kritikal: kata laluan berkod keras". Pembangun menyemak konteks: ini ialah fail ujian unit, data ujian tiruan, tidak dikeluarkan ke dalam pengeluaran dan tidak dialihkan ke sistem sebenar. Penemuan itu adalah positif palsu. Pembangun mendokumenkan perkara ini tetapi tidak mengambil tindakan kerana ia bukan rahsia sebenar. Pengajaran: Tanda "rahsia keras" AI mesti dihapuskan mengikut konteks; Tidak setiap rentetan adalah rahsia.

Kes 3 — Pembetulan kerentanan baharu. AI mencadangkan pembetulan untuk kelemahan XSS (skrip merentas tapak); tetapi kod yang dia cadangkan mengosongkan input di tempat yang salah dan melangkau pengekodan output di kawasan lain; Akibatnya, jurang tidak ditutup sepenuhnya. Pakar keselamatan menyemak pembaikan, melihat pengekodan yang hilang dan membetulkannya pada lapisan yang betul. Pelajaran: Tampalan yang disyorkan AI tidak selamat secara automatik; Setiap pembaikan disemak dan diuji.

Gesaan lemah / Gesaan kuat

Gesaan yang lemah:

Adakah terdapat kelemahan dalam kod ini, betulkan: [kod]

Gesaan ini tidak memberikan konteks (bahasa, rangka kerja, sumber input), tidak meminta justifikasi, tidak mempersoalkan positif palsu, dan terbuka untuk menerima pembetulan yang dihasilkan oleh AI secara membuta tuli. AI bercampur-campur tanda kedua-dua kelemahan sebenar dan tidak wujud.

Gesaan kuat:

Peranan anda: pembantu yang menjadi MATA KEDUA kepada pembangun dalam semakan kod selamat. Membuat keputusan; pertimbangkan pembetulan yang digunakan secara langsung. Kod: [nyatakan bahasa/rangka kerja].Konteks: fungsi ini [sumber input: cth. menerima [permintaan HTTP luaran], menulis ke [destinasi output]. Tugas anda: (1) tandakan kemungkinan kelemahan dengan kelas OWASP, berikan nombor baris + mengapa berisiko + cara mengeksploitasi + bukti untuk setiap satu, (2) tulis sekurang-kurangnya 1 senario positif palsu untuk setiap penemuan (cth. jika input dibersihkan dalam lapisan lain), (3) cadangkan pembetulan tetapi dengan tanda "[semakan + tulis ujian]"; Nilai juga sama ada pembetulan itu memperkenalkan kelemahan/pepijat baharu. Menambah kerentanan palsu.[kod]

Gesaan yang kuat memberikan konteks, meminta kelas dan bukti OWASP, soalan positif palsu dan risiko pemulihan, memaksa semakan manusia.

Templat gesaan yang boleh disalin

TEMPLAT IMBAS KERENDAHAN Periksa kod [bahasa/rangka kerja] untuk 10 Teratas OWASP. Untuk setiap penemuan yang mungkin: nombor baris, kelas kerentanan, sebab ia berisiko, eksploitasi sampel, kekuatan bukti (tertentu/mungkin/lemah). Konteks: input [sumber], output [sasaran]. Menambah penemuan rekaan; Jika anda tidak pasti, taip "[mesti disahkan]". Kod: [tampal]

POLA PENGHAPUSAN POSITIF PALSU Untuk mencari kod berikut, senaraikan senario yang TIDAK terdapat kelemahan sebenar: bolehkah input dikosongkan pada lapisan lain, adakah laluan ini boleh diakses, adakah nilai ini ujian/sampel, adakah rangka kerja dilindungi secara automatik. Tulis cara mengesahkan untuk setiap satu. Penemuan: [tampal]

MEMBAIKI TEMPLATEREVALUASI cadangkan pembetulan untuk kelemahan berikut; kemudian kritik pembetulan anda sendiri: (1) adakah ia benar-benar menutup kelemahan, (2) adakah ia memperkenalkan kelemahan/pepijat baharu, (3) apakah ujian yang perlu saya tulis (kes positif dan negatif), (4) kesan prestasi/fungsi. Saya akan menyemak dan menguji pembetulan. Kerentanan + kod: [tampal]

TEMPLAT PENGAJARAN CORAK SELAMAT untuk kelas kerentanan [cth. SQL injection] secara perbandingan menunjukkan corak menaip selamat dan corak ralat biasa dalam bahasa/rangka kerja ini. Peraturan am + berikan contoh kod; tetapi saya mahu anda bertanya konteks sebelum melaksanakannya dalam kod saya. Bahasa/kerangka: [tulis]

Kesilapan biasa

  • Semakan tanpa konteks. Tanpa bahasa, rangka kerja dan konteks input/output, AI mengelirukan kedua-dua penemuan sebenar dan palsu; Pastikan anda memberikan konteks.
  • Menganggap setiap tanda sebagai kelemahan sebenar. AI menghasilkan positif palsu (data ujian, input dibersihkan pada lapisan lain); Ayak setiap penemuan dengan konteks.
  • Menggunakan pembetulan AI secara membuta tuli. Tampalan yang disyorkan mungkin memperkenalkan kelemahan/pepijat baharu; menyemak dan menulis ujian.
  • Mempercayai negatif palsu. Walaupun AI mengatakan "tiada kelemahan", periksa sendiri laluan kritikal; Pengimbasan statik tidak mengesan setiap kelemahan.
  • Memberi kod/rahsia kepada alat luaran. Kod peribadi dan rahsia sebenar (kunci, kata laluan) adalah harta intelek dan kelemahan; awanama atau gunakan alat korporat yang terpencil.
Petua: Apabila mempunyai kod semakan AI, penapis yang paling cekap ialah meminta "kekuatan bukti" (tertentu/mungkin/lemah) untuk setiap penemuan. Kebanyakan penemuan yang ditandakan "lemah" adalah positif palsu; anda memperuntukkan tenaga anda kepada yang "pasti".
Awas: Pembaikan keselamatan yang dicadangkan oleh AI tidak seharusnya memasuki gudang tanpa diuji. "Pembetulan" yang salah boleh menyebabkan kelemahan terbuka dan membawa kepada ralat fungsi dalam pengeluaran; Setiap tampalan melalui pintu semakan dan ujian.

Secara ringkasnya

Semakan kod selamat ialah cara paling murah untuk menangkap kelemahan sebelum ia dikeluarkan, dan memandangkan kod ialah bahasa, AI menjadi mata kedua yang berkuasa di sini: menandakan corak berbahaya, menerangkan risiko, mencadangkan pembetulan. Tetapi AI tidak melihat keseluruhan konteks operasi, menghasilkan positif palsu dan negatif palsu, dan tampalan yang disyorkannya mungkin memperkenalkan kelemahan baharu. Jadi semakan mempunyai enam langkah (konteks, saringan, justifikasi, penghapusan positif palsu, pengesahan tetap, kelulusan manusia) dan keputusannya terletak pada pembangun dan pakar keselamatan. Tiga prinsip: tiada penemuan ditafsirkan tanpa konteks, setiap tanda dihapuskan dengan konteks, tiada pembaikan masuk ke storan yang belum diuji. Dan kod/rahsia itu tidak pernah diberikan kepada alat luar tanpa pennamaan.

Tugasan permohonan

Ambil contoh coretan kod (sama ada mengalih keluar bahagian sensitif daripada kod anda sendiri atau kod sampel yang mempunyai kelemahan). Minta AI memeriksanya dengan templat "Pengimbasan Kerentanan"; Gunakan templat "Penghapusan Positif Palsu" untuk setiap penemuan dan hapuskan yang sebenar. Ambil pembetulan penemuan paling serius dengan templat "Penilaian Pemulihan", semak sendiri dan tulis satu kes ujian positif + satu negatif. Perhatikan berapa banyak penemuan adalah positif palsu.

senarai semak

  • [ ] Saya memberikan bahasa, rangka kerja dan konteks input/output sebelum menyemak kod.
  • [ ] Saya meminta nombor baris, kelas kerentanan, laluan eksploit dan bukti untuk setiap penemuan.
  • [ ] Saya menapis setiap penemuan untuk positif palsu dengan konteks.
  • [ ] Saya tidak menggunakan pembetulan AI secara membuta tuli; Saya menyemak dan menulis ujian.
  • [ ] Walaupun keluaran "Tiada kelemahan", saya meneliti sendiri laluan kritikal.
  • [ ] Saya menamakan kod/rahsia atau menggunakan alatan terpencil korporat.
  • [ ] Saya telah lulus penemuan dan membetulkan melalui kelulusan pembangun + keselamatan.