Cara Menghapus “Kode Tersembunyi” dari ChatGPT dan LLM lainnya

CometAPI
AnnaDec 2, 2025
Cara Menghapus “Kode Tersembunyi” dari ChatGPT dan LLM lainnya

Seiring dengan semakin banyaknya model bahasa besar (LLM) yang menghasilkan kode yang berfungsi dan terintegrasi ke dalam alur pengembangan dan tumpukan agen, terdapat risiko yang meningkat bahwa tersembunyi or jahat instruksi — baik yang tertanam dalam keluaran model, disuntikkan melalui halaman web atau plugin pihak ketiga, atau diperkenalkan selama pelatihan model — dapat menyebabkan perilaku tidak aman saat kode tersebut dieksekusi.

Menurut laporan pengguna yang beredar di komunitas pengembang, seorang pengembang perangkat lunak mengalami kehilangan data yang sangat besar — ​​sekitar 800GB file telah dihapus, Termasuk seluruh aplikasi CursorAI itu sendiri — setelah mengeksekusi kode yang dihasilkan dengan bantuan dari Gemini 3 saat bekerja di dalam IDE KursorAISeiring dengan semakin banyaknya pengembang yang mengandalkan LLM untuk pembuatan kode, konsekuensi dari skrip yang tidak ditinjau atau tidak aman menjadi semakin parah.

Oleh karena itu, sangat penting untuk mengetahui cara mendeteksi dan menghapus kode berbahaya yang dihasilkan oleh LLM.

Apa yang dimaksud dengan “kode tersembunyi” dalam konteks ChatGPT dan LLM?

Apa yang dimaksud orang dengan “kode tersembunyi”?

“Kode tersembunyi” adalah istilah umum yang digunakan pengembang untuk menggambarkan instruksi tertanam atau konten yang dapat dieksekusi dalam teks (atau file) yang diserap atau dipancarkan oleh LLM, termasuk:

  • Instruksi bergaya prompt tertanam di dalam konten pengguna (misalnya, “Abaikan instruksi sebelumnya…” disembunyikan dalam PDF).
  • Karakter tak terlihat atau spasi dengan lebar nol yang digunakan untuk menyembunyikan token atau melanggar asumsi tokenisasi.
  • Muatan yang dikodekan (base64, berkode URL, penyematan steganografi di dalam gambar atau dokumen).
  • HTML/JS Tersembunyi atau blok skrip yang disertakan dalam konten yang diformat yang mungkin ditafsirkan oleh perender hilir.
  • Metadata atau anotasi (komentar berkas, lapisan tersembunyi dalam PDF) yang menginstruksikan sistem pengambilan atau model.
  • Perilaku implisit timbul dari kode yang dihasilkan yang menggunakan API berbahaya (misalnya, eval, exec, subprocess, atau panggilan jaringan/sistem) — bahkan ketika maksudnya tidak secara eksplisit jahat.
  • Instruksi yang disuntikkan secara cepat yang menyebabkan model menghasilkan kode yang menyertakan perintah tersembunyi atau logika seperti pintu belakang karena penyerang merekayasa perintah atau konteks tersebut.

Vektor serangan ini sering disebut injeksi cepat or injeksi prompt tidak langsung ketika tujuannya adalah mengubah perilaku model. Komunitas keamanan kini memperlakukan injeksi cepat sebagai kerentanan LLM inti dan OWASP telah memformalkannya sebagai kategori risiko LLM.

Apa bedanya dengan malware biasa atau XSS?

Perbedaannya adalah semantik Lapisan: injeksi prompt menargetkan perilaku model yang mengikuti instruksi, alih-alih OS host atau mesin rendering browser. Meskipun demikian, HTML atau skrip tersembunyi yang akhirnya berjalan di perender web tetap merupakan serangan yang dapat dieksekusi (mirip XSS); baik lapisan semantik maupun eksekusi harus dilindungi. Para pemimpin industri dan peneliti telah menyebut injeksi prompt sebagai "tantangan keamanan terdepan" dan terus menerbitkan strategi mitigasi.

Mengapa LLM dapat menghasilkan kode tersembunyi atau berbahaya?

Perilaku model, data pelatihan, dan konteks instruksi

LLM dilatih untuk menghasilkan kelanjutan yang masuk akal berdasarkan konteks dan instruksi. Jika konteks tersebut mengandung isyarat yang berlawanan, atau jika pengguna meminta kode kepada model yang melakukan tindakan yang kuat, model dapat menghasilkan kode yang mencakup perilaku halus atau aktif.

LLM menghasilkan kode yang masuk akal namun tidak aman

LLM dioptimalkan untuk kelancaran dan kegunaan, bukan untuk keamanan dalam menghadapi efek samping yang merusak. Mereka dengan senang hati akan menghasilkan ringkasan yang ringkas. rm -rf /path/to/dir or shutil.rmtree() menelepon ketika diminta untuk "membersihkan" — dan karena respons mereka seringkali diutarakan dengan percaya diri, pengguna mungkin meniru dan menjalankannya tanpa pengawasan yang memadai. Masalah "halusinasi percaya diri" inilah yang menyebabkan permintaan yang tampaknya tidak berbahaya menjadi berbahaya.

Otomatisasi alur kerja pengaburan

Aktor ancaman kini mengotomatiskan pengaburan kode dengan merantai panggilan LLM: satu model menghasilkan muatan, model lain mengolahnya kembali untuk menghindari deteksi tanda tangan, dan seterusnya. Laporan ancaman industri dan analisis vendor pada tahun 2025 mendokumentasikan "pengaburan berbantuan AI" ini sebagai teknik yang sedang berkembang.

Bagaimana Anda dapat mendeteksi kode tersembunyi di dalam keluaran model?

Daftar periksa triase cepat

  1. Memindai Unicode yang tidak terlihat/tidak biasa (penggabung lebar nol, spasi lebar nol, tanda urutan byte, homoglif non-ASCII).
  2. Jalankan analisis statis / penguraian AST untuk mengidentifikasi penggunaan API yang kuat (eval, exec, subprocess, os.system, panggilan reflektif).
  3. Cari muatan yang dikodekan (base64, gumpalan heksadesimal, string panjang yang berulang, atau konten terkompresi).
  4. Periksa pola pengaburan (penggabungan string yang membangun nama API, aritmatika karakter, chr() rantai).
  5. Gunakan analisis semantik untuk mengonfirmasi apakah kode benar-benar melakukan I/O, jaringan, atau mutasi sistem berkas.

Deteksi pola statis (cepat, baris pertama)

  • Penguraian dan pemeriksaan yang memahami bahasa. Segera parsing output yang dihasilkan ke dalam blok kode, bukan prosa. Jalankan formatter dan linter (Black/Prettier, pylint, eslint). Aturan lint harus menandai penggunaan eval, exec, rm -rf, panggilan subproses mentah, atau pipa shell yang menyusun perintah secara dinamis.
  • Pemindai pola token dan string. Cari token dan pola berisiko tinggi: sudo, jalur absolut seperti /home/, C:\, rm -rf, shutil.rmtree, subprocess.Popen, blob base64 sebaris, string panjang yang tidak dapat ditafsirkan, dan shebang yang mengubah konteks penerjemah.
  • Pemindaian rahasia dan pemeriksaan asal-usul. Mendeteksi kredensial yang dikodekan secara keras, URL yang mengarah ke registri yang tidak tepercaya, atau kode yang secara dinamis menarik paket dari sumber yang sembarangan.

Analisis statis menangkap banyak masalah yang jelas dengan cepat dan murah untuk dijalankan sebagai bagian dari gerbang CI.

Deteksi semantik dan kontekstual (lebih dalam)

  • Analisis maksud. Gunakan model sekunder atau mesin aturan untuk mengklasifikasikan maksud kode yang dihasilkan: apakah "baca", "tulis", "hapus", "jaringan", "instal"? Apa pun yang dikategorikan sebagai hapus/tulis akan memicu eskalasi.
  • Analisis aliran data. Analisis kode untuk mendeteksi apakah jalur yang tidak divalidasi atau disediakan pengguna dapat mencapai API yang merusak. Misalnya, jika suatu variabel yang diturunkan dari keluaran LLM atau berkas jarak jauh kemudian digabungkan menjadi perintah shell, tandai variabel tersebut.
  • Korelasi asal-usul. Simpan catatan lengkap percakapan, perintah sistem, dan halaman konteks. Jika keluaran yang mencurigakan berkorelasi dengan dokumen eksternal atau panggilan plugin tertentu, hal itu dapat mengindikasikan injeksi perintah atau konteks yang terkontaminasi.

Deteksi dinamis dan perilaku (paling andal)

  • Eksekusi kotak pasir dengan pemantauan. Jalankan kode yang dihasilkan dalam lingkungan sementara yang sangat terbatas tanpa jaringan, tanpa pemasangan host, dan tanpa pemfilteran syscall (seccomp). Pantau aktivitas sistem berkas, upaya pemanggilan jaringan, proses spawning, dan I/O yang tidak biasa.
  • Pengujian Canary. Sebelum menjalankan data nyata, jalankan kode terhadap direktori sintetis yang berisi file sentinel; pantau penghapusan atau penimpaan.
  • Heuristik perilaku. Cari perulangan yang melintasi direktori induk, operasi rekursif tanpa pemeriksaan kedalaman, atau pola penggantian nama yang dapat merusak banyak berkas (misalnya, berulang kali menulis nama berkas yang sama).
    Analisis dinamis adalah satu-satunya cara untuk mendeteksi muatan yang dikaburkan, ditunda, atau dipicu hanya pada waktu proses.

Bagaimana Anda harus menghapus atau menetralkan kode tersembunyi sebelum mengeksekusi keluaran LLM?

Penghapusan defensif vs. mengubah semantik

Ada dua tujuan saat “menghapus kode tersembunyi”:

  1. Sanitasi — hapus konten yang jelas-jelas bukan kode atau mencurigakan (Unicode tak terlihat, karakter dengan lebar nol, muatan base64 yang ditambahkan). Hal ini seharusnya tidak mengubah logika yang seharusnya aman.
  2. Penetralan — untuk apa pun yang mengeksekusi atau memanggil layanan eksternal, nonaktifkan panggilan tersebut atau jadikan tanpa operasi hingga diverifikasi.

Selalu lebih suka netralisasi + tinjauan Penghapusan buta: menghapus bagian kode secara sembarangan dapat menghasilkan perilaku yang rusak atau tidak terduga. Sebagai gantinya, ganti konstruksi yang mencurigakan dengan stub eksplisit yang tercatat dan gagal dengan aman (menimbulkan pengecualian atau mengembalikan nilai default yang aman).

Langkah 1 — Perlakukan kode yang dihasilkan sebagai data yang tidak tepercaya

Jangan pernah mengeksekusi kode langsung dari ChatGPT (atau LLM apa pun) tanpa melewatinya melalui jalur penghapusan dan pengerasan. Jalur tersebut harus diberlakukan oleh kebijakan dan diotomatisasi dalam CI/CD.

Langkah 2 — Ekstrak dan kanonikalisasi kode

  • Menormalkan teks dan menghapus karakter lebar nolHapus karakter seperti U+200B, U+200C, U+200D, U+FEFF, dan titik kode lebar/format nol lainnya. Catat apa yang dihapus untuk audit. Langkah ini menghilangkan banyak enkode "tersembunyi" yang digunakan untuk penyamaran visual.
  • Hapus semua konteks non-kodeHapus narasi, komentar tersembunyi, dan pembungkus HTML/Markdown apa pun. Ubah kode ke bentuk kanonik menggunakan pemformat bahasa (Black, Prettier) sehingga spasi atau karakter kontrol yang dikaburkan dapat dinormalisasi.
  • Tolak atau karantina kode dengan konstruksi ini: dinamis eval, panggilan subproses mentah (os.system, subprocess.Popen), blob base64 sebaris didekodekan menjadi eksekusi, atau disematkan #! arahan yang mencoba menggeser konteks penerjemah. Menormalkan teks dan menghapus karakter lebar nol
    Hapus karakter seperti U+200B, U+200C, U+200D, U+FEFF, dan titik kode lebar/format nol lainnya. Catat apa yang dihapus untuk audit. Langkah ini menghilangkan banyak enkode "tersembunyi" yang digunakan untuk penyamaran visual.

Langkah 3 — Parsing ke AST dan ganti node yang berisiko

Dengan kode yang diurai menjadi AST, temukan node yang memanggil eksekusi dinamis (misalnya, exec), atau yang membangun nama fungsi secara terprogram. Ganti dengan stub aman yang memunculkan pengecualian terkendali yang menunjukkan "perilaku dinamis tidak aman diblokir". Buat salinan sumber yang telah disanitasi dan didukung AST untuk ditinjau. Jalankan pemeriksaan pola keamanan (aturan semgrep khusus untuk lingkungan Anda). Jika ditemukan kecocokan, tandai dan netralkan.

Langkah 4 — Pengerasan dan penulisan ulang statis

  • Penulisan ulang otomatis: : melewati kode melalui pembersih otomatis yang mengganti panggilan berbahaya dengan pembungkus yang aman — misalnya, mengganti os.system() / subprocess dengan eksekutor sandboxed yang disetujui yang memberlakukan batas waktu dan pemblokiran jaringan.
  • Gerbang kemampuan: Ubah atau hapus kunci API, token, atau panggilan ke titik akhir istimewa; ganti dengan adaptor tiruan untuk pengujian lokal. Cegah penyertaan rahasia atau URL secara tidak sengaja.
  • Penulisan ulang ketergantungan: blok dinamis pip / npm Instalasi yang dibuat oleh kode. Membutuhkan dependensi untuk dideklarasikan dan disetujui melalui registri Anda.

Langkah 5 — Jalankan di dalam kotak pasir yang agresif

  • Kontainer sementara / microVM: Jalankan kode dalam kontainer/VM yang tidak memiliki jaringan, tidak memiliki akses ke kredensial host, dan akses sistem berkas terbatas. Teknologi seperti gVisor, Firecracker, atau layanan eksekusi sementara khusus dapat digunakan. Jika kode harus mengakses I/O, gunakan proksi yang menerapkan kebijakan.
  • Filter panggilan sistem & seccomp: Batasi syscall yang diizinkan. Penulisan berkas di luar direktori sementara harus diblokir.
  • Batasan sumber daya/waktu: : tetapkan batasan CPU/memori/waktu sehingga bom logika pun tidak dapat berjalan tanpa batas.

Eksekusi sandbox plus pemantauan sering kali mengungkap muatan yang terlewatkan oleh pemeriksaan statis. Panduan industri dan laporan resmi terbaru merekomendasikan penggunaan sandbox sebagai mitigasi inti.

Alat dan aturan otomatis apa yang harus ada di jaringan Anda?

Komponen rantai alat yang direkomendasikan

  • Modul sanitasi Unicode (perpustakaan khusus atau yang sudah ada). Harus mencatat karakter yang dinormalisasi.
  • Parser + Penganalisis AST untuk setiap bahasa target (Python ast, typed-ast, parser JavaScript, parser Java).
  • Penganalisis statis / SAST: Bandit (Python), Semgrep (multi-bahasa, dapat disesuaikan), ESLint dengan plugin keamanan.
  • Entropi dan heuristik dekoder: mendeteksi base64/hex/gzip dan mengarahkan ke inspeksi.
  • Waktu proses kotak pasir: kontainer minimal dengan profil seccomp/AppArmor yang ketat atau penerjemah tingkat bahasa dengan syscall yang dinonaktifkan.
  • Penegak kebijakan: komponen yang memutuskan modul yang diizinkan, titik akhir yang diizinkan, dan pembungkus API yang aman.
  • Jejak audit: log yang tidak dapat diubah yang merekam keluaran asli, keluaran yang telah disanitasi, diff, dan keputusan.

Contoh pola semgrep (konseptual)

Gunakan aturan singkat dan konservatif yang menandai penggunaan fungsi berbahaya. Misalnya:

  • Bendera eval, exec, Function konstruktor (JS), impor dinamis, atau nama API yang dibuat berdasarkan string.
  • Tandai panggilan jaringan di luar daftar putih (misalnya, requests.get ke host yang tidak dikenal).
  • Bendera menulis ke jalur sensitif (/etc, folder sistem) atau munculnya proses.

(Simpan ini sebagai item konfigurasi per organisasi dan perketat dari waktu ke waktu.)

Apa saja cuplikan sanitasi praktis (contoh aman)?

Berikut adalah beberapa contoh pertahanan diri yang tidak berbahaya yang dapat Anda adaptasi. sanitasi dan deteksi potongan kode — bukan instruksi eksploitasi.

Contoh: menghilangkan karakter lebar nol (Python, defensif)

import re
ZERO_WIDTH_RE = re.compile(r'')
def strip_zero_width(s: str) -> str:
    cleaned = ZERO_WIDTH_RE.sub('', s)
    return cleaned

Ini menghapus karakter yang sering digunakan penyerang untuk menyembunyikan kode dalam teks yang terlihat. Selalu catat apa yang dihapus dan perlakukan penghapusan sebagai bagian dari jejak audit.

Contoh: mengurai dan memeriksa AST (Python, konseptual)

import ast

def has_dynamic_exec(source: str) -> bool:
    tree = ast.parse(source)
    for node in ast.walk(tree):
        if isinstance(node, ast.Call):
            if getattr(node.func, 'id', '') in ('eval', 'exec',):
                return True
        if isinstance(node, ast.Attribute):
            if getattr(node, 'attr', '') in ('popen', 'system'):
                return True
    return False

If has_dynamic_exec mengembalikan True, jangan jalankan kode; sebagai gantinya ganti simpul dinamis dengan rintisan aman dan perlukan peninjauan.

Catatan: contoh-contoh ini bersifat defensif. Jangan hapus pencatatan, audit, atau peninjauan manusia dari alur kerja Anda.

Pikiran penutup: perlakukan keluaran LLM seperti kode yang tidak tepercaya, selalu

LM adalah alat produktivitas yang ampuh — LM dapat menghasilkan kode yang elegan, mempercepat draf, dan mengotomatiskan pekerjaan rutin. Namun, ketika LM mencapai eksekusi, aturan keamanannya berubah: keluaran model harus diperlakukan sebagai artefak yang tidak tepercayaKombinasi injeksi cepat, riset pintu belakang, dan pengungkapan kerentanan di dunia nyata selama 18–30 bulan terakhir menunjukkan poin yang jelas: permukaan risiko telah berkembang dan akan terus berkembang.

Pertahanan praktis yang menggabungkan penguraian, analisis statis, pengujian dinamis sandbox, tata kelola, dan red-teaming berkelanjutan akan menghentikan sebagian besar serangan. Namun, tim juga harus berinvestasi dalam kontrol organisasi: hak istimewa paling rendah, asal usul, dan budaya yang menganggap keluaran LLM perlu diverifikasi. Industri ini sedang membangun alat dan kerangka kerja untuk mempermudah pola-pola ini; sementara itu, penerapan daftar periksa di atas mengurangi kemungkinan lolosnya muatan tersembunyi.

Pengembang dapat mengakses API LLM terbaru seperti Claude Soneta 4.5 API dan Pratinjau Gemini 3 Pro dll melalui CometAPI, versi model terbaru selalu diperbarui dengan situs web resmi. Untuk memulai, jelajahi kemampuan model di tempat bermain dan konsultasikan Panduan API untuk petunjuk terperinci. Sebelum mengakses, pastikan Anda telah masuk ke CometAPI dan memperoleh kunci API. API Komet menawarkan harga yang jauh lebih rendah dari harga resmi untuk membantu Anda berintegrasi.

Siap untuk berangkat?→ Daftar ke CometAPI hari ini !

Jika Anda ingin mengetahui lebih banyak tips, panduan, dan berita tentang AI, ikuti kami di VKX dan Discord!

SHARE THIS BLOG

500+ Model dalam Satu API

Diskon hingga 20%