SBOM Membuktikan Apa yang Anda Pasang. Ia Tidak Boleh Membuktikan Sama Ada Anda Patut Memasangnya.
SBOM adalah resit. Ia memberitahu anda apa yang telah anda pasang. Ia tidak memberitahu anda sama ada tindakan memasangnya itu betul atau tidak.
Kebanyakan pasukan menggunakan SBOM dan imbasan CVE dalam saluran paip (pipeline) CI/CD mereka. Alatan ini sangat bagus untuk mencari kerentanan yang diketahui dalam pakej sedia ada. Namun, ia mempunyai titik buta yang besar apabila menggunakan ejen pengekodan AI.
Ejen AI mencadangkan nama pakej. Ia melakukan ini dengan tahap keyakinan yang sama, tidak kira sama ada nama tersebut adalah benar, halusinasi, atau typosquat.
Jika penyerang mendaftarkan nama pakej berniat jahat semalam, ia belum mempunyai CVE lagi. Imbasan pasca-pemasangan anda akan melihatnya dan menandakannya sebagai bersih. Imbasan tersebut jujur, tetapi ia menjawab soalan yang salah. Ia menjawab "adakah ini diketahui sebagai buruk?" dan bukannya "patutkah nama ini wujud dalam timbunan (stack) kita?".
Menjelang masa SBOM merekodkan pakej berniat jahat, kerosakan telah pun berlaku. Kod berniat jahat sering berjalan semasa fasa pemasangan melalui skrip pasca-pemasangan (postinstall scripts). Ia boleh mencuri pemboleh ubah persekitaran (environment variables) dan rahsia CI anda sebelum pengimbas anda sempat melihat struktur fail tersebut.
Anda memerlukan keputusan sebelum kesan sampingan berlaku.
Saya telah membina satu alatan ringkas untuk menyelesaikan masalah ini. Ia adalah gerbang provenans pra-pemasangan (pre-install provenance gate). Ia berfungsi secara berbeza daripada pengimbas:
• Ia menyemak nama SEBELUM npm install dijalankan.
• Ia menggunakan pendekatan tolak secara lalai (default-deny) terhadap garis dasar yang disahkan.
• Ia menandakan typosquat dengan mengukur jarak suntingan (edit distance) daripada pakej popular.
• Ia menangkap halusinasi yang tidak sepadan dengan mana-mana nama baik yang diketahui.
• Ia mengesahkan .npmrc anda untuk memastikan anda tidak mengakses daftar (registry) haram.
Alatan ini adalah luar talian, tanpa kunci, dan hanya menggunakan perpustakaan standard Python. Ia tidak menyambung ke rangkaian. Ia tidak menyelesaikan (resolve) pakej. Ia hanya melihat nama yang dicadangkan dan bertanya: "Adakah kita mengesahkan nama ini?"
Jika nama tersebut tidak terdapat dalam tangkapan (snapshot) yang disahkan dan tidak terdapat dalam garis dasar popular, gerbang tersebut akan mengembalikan DENY.
Berhenti bergantung hanya pada rekod tentang apa yang telah berlaku. Mula tentukan apa yang dibenarkan untuk berlaku.
Sumber: https://dev.to/alex_spinov/an-sbom-proves-what-you-installed-it-cant-prove-you-should-have-117c
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
