Etika dan Legalitas

Kerangka etis dan hukum pengujian: responsible disclosure, lingkup, dan hanya target yang diizinkan.

Daftar isi

Keterampilan menemukan celah keamanan berdampak langsung pada sistem milik orang lain, sehingga kerangka etis dan hukumnya perlu ditetapkan sebelum alat apa pun dijalankan. Topik ini menetapkan aturan main untuk seluruh jalur, yaitu hanya target yang diizinkan, hanya pengujian yang berada dalam lingkup yang disetujui, dan penyampaian setiap temuan melalui alur responsible disclosure. Setelah topik ini selesai, batas antara latihan yang sah dan akses tidak sah sudah tegas, dan batas tersebut menjadi dasar seluruh latihan pada jalur ini.

Hanya target yang diizinkan#

Pengujian keamanan tanpa izin dari pemilik sistem adalah akses tidak sah, dan akses tidak sah dapat dijerat hukum. Di Indonesia, ketentuan mengenai akses tidak sah terhadap sistem elektronik termuat dalam UU ITE, sedangkan yurisdiksi lain memiliki undang-undang yang sejenis, misalnya Computer Fraud and Abuse Act (CFAA) di Amerika Serikat. Alasan sedang belajar umumnya bukan pembenaran yang diterima, sehingga niat baik tidak mengubah status perbuatannya.

Aturan praktisnya sederhana: hanya sistem yang secara eksplisit memberi izin pengujian yang boleh menjadi target. Pada jalur ini, izin itu hadir dalam dua bentuk, yaitu localhost milik sendiri dan aplikasi lab seperti OWASP Juice Shop yang memang dirancang untuk latihan. Situs nyata, sistem kantor, dan jaringan kampus tetap dilarang menjadi target walaupun celahnya terlihat jelas dari luar.

Lingkup pengujian#

Lingkup (scope) adalah daftar target, metode, dan waktu pengujian yang disetujui pemilik sistem. Lingkup menarik batas antara yang boleh dan yang tidak boleh secara rinci, karena izin yang terlalu umum, misalnya persetujuan tanpa daftar target, tidak cukup untuk menentukan kebolehan sebuah tindakan. Pernyataan lingkup yang baik memuat target secara eksplisit, metode yang diizinkan, batas laju permintaan, waktu pelaksanaan, dan kanal pelaporannya.

Contoh berikut memuat bentuk pernyataan lingkup yang lazim digunakan pada pengujian yang telah disetujui.

text Contoh pernyataan lingkup pengujian
Lingkup yang diizinkan:
- Target: aplikasi catatan pada https://lab.local dan https://api.lab.local
- Metode: pengujian manual pada akun penguji sendiri
- Waktu: hari kerja, pukul 09.00 sampai 17.00 WIB
- Batas laju: maksimal 10 permintaan per detik

Di luar lingkup:
- Subdomain lain, infrastruktur jaringan, dan layanan pihak ketiga
- Pengujian penolakan layanan (denial of service) dalam bentuk apa pun
- Penghapusan atau perubahan data milik pengguna lain

Pelaporan:
- Kirim temuan ke [email protected]
- Jangan mempublikasikan temuan sebelum perbaikan disepakati

Butir di luar lingkup sama pentingnya dengan butir di dalamnya. Layanan pihak ketiga yang tersemat pada aplikasi, misalnya, tetap dilarang walaupun jalurnya terlihat dari aplikasi utama, karena pemiliknya berbeda. Ketika keraguan muncul di tengah pengujian, keputusannya selalu sama, yaitu berhenti dan menanyakan kembali batasnya kepada pemilik sistem. Dokumen lingkup juga melindungi penguji karena batas tindakannya tercatat jelas sejak awal.

Responsible disclosure#

Responsible disclosure adalah alur pelaporan kerentanan secara bertanggung jawab, yaitu menyampaikan temuan kepada pemilik sistem lebih dahulu, memberi waktu perbaikan, dan menunda publikasi sampai perbaikannya tersedia. Alur ini melindungi pengguna karena celahnya ditutup sebelum cara mengeksploitasinya menyebar. Kebalikannya, pelaporan tanpa koordinasi (full disclosure) yang mempublikasikan detail sebelum perbaikan justru memperluas jendela kesempatan bagi penyalahgunaan.

Langkah-langkahnya berurutan, dan setiap langkah meninggalkan jejak tertulis.

  1. Dokumentasikan temuan beserta langkah reproduksinya sebelum menyampaikannya.
  2. Cari kanal pelaporan resmi pemilik sistem, misalnya halaman keamanan, berkas security.txt pada domain, atau alamat surel keamanan.
  3. Tulis laporan yang memuat ringkasan, langkah reproduksi, dampak, dan saran perbaikan.
  4. Beri waktu perbaikan sesuai kesepakatan, lalu tanggapi pertanyaan yang menyertainya.
  5. Sepakati waktu dan cakupan publikasi apabila publikasi memang diinginkan.

Kerangka laporan berikut menyusun isi pesan agar pemilik sistem dapat menindaklanjutinya tanpa bertanya bolak-balik.

markdown Kerangka laporan responsible disclosure
## Ringkasan
Satu paragraf yang menyatakan jenis kerentanan, lokasinya, dan dampaknya.

## Langkah reproduksi
1. Kondisi awal, misalnya akun yang dipakai dan halaman yang dibuka.
2. Urutan permintaan yang dilakukan, lengkap dengan permintaan mentahnya.
3. Respons server yang membuktikan kerentanannya.

## Dampak
Skenario penyalahgunaan yang nyata, tanpa dramatisasi dan tanpa data milik orang lain.

## Saran perbaikan
Perbaikan teknis yang diusulkan beserta alasannya.

## Bukti
Tangkapan layar dan keluaran minimum yang cukup untuk membuktikan temuan. Hapus segera apabila memuat data pribadi.

Laporan yang baik tidak memuat data milik pengguna lain dan tidak menyertakan eksploitasi yang merusak. Bukti cukup sampai kerentanannya terbukti, karena tujuannya meyakinkan pemilik sistem, bukan memperlihatkan seberapa jauh celah itu dapat didorong. Setelah laporan diterima, jalur komunikasinya dijaga tetap terbuka sampai perbaikannya diverifikasi ulang.

Lingkup yang dapat dijalankan#

Pernyataan lingkup paling berguna apabila diterjemahkan menjadi pemeriksaan yang dapat dijalankan. Alat pengujian sebaiknya menolak target di luar lingkup secara otomatis, sehingga kecerobohan tertangkap sebelum permintaan pertama terkirim. Berkas berikut menerapkan gagasan itu dalam bentuk paling sederhana, yaitu daftar target yang diizinkan beserta fungsi pemeriksa anggotanya.

python cek-lingkup.py
"""Pemeriksa lingkup sederhana: menolak target yang tidak tercantum
dalam pernyataan lingkup pengujian."""

LINGKUP_DIIZINKAN = {"127.0.0.1", "localhost", "juice-shop.local"}
AKHIRAN_LAB = ".lab.local"


def dalam_lingkup(host):
    """Kembalikan True hanya bila host termasuk target yang diizinkan."""
    return host in LINGKUP_DIIZINKAN or host.endswith(AKHIRAN_LAB)


target_uji = [
    "localhost",
    "juice-shop.local",
    "api.lab.local",
    "contoh.co.id",
    "192.168.1.20",
]

for host in target_uji:
    status = "diizinkan" if dalam_lingkup(host) else "ditolak"
    print(f"{host:20} {status}")
text Keluaran
localhost            diizinkan
juice-shop.local     diizinkan
api.lab.local        diizinkan
contoh.co.id         ditolak
192.168.1.20         ditolak

Dua target terakhir ditolak karena tidak tercantum pada daftar yang diizinkan dan tidak berakhiran domain lab. Pada alat yang lebih lengkap, fungsi pemeriksa semacam ini dipanggil sebelum setiap permintaan dikirim, dan kegagalan pemeriksaan menghentikan prosesnya. Pola ini memindahkan kepatuhan dari kedisiplinan pribadi menjadi perilaku bawaan perangkat lunaknya, dan setiap keputusan pemeriksa dapat dicatat sebagai log.

Kesalahan umum#

Pelanggaran etika dalam pengujian keamanan jarang berawal dari niat buruk dan lebih sering berawal dari keputusan kecil yang dianggap sepele. Pola ini wajar karena alat pengujian jauh lebih cepat digunakan daripada proses izinnya diselesaikan. Empat pola berikut perlu dikenali sejak awal.

  • Menguji terlebih dahulu dan mencari izin belakangan. Perbaikannya adalah menolak menjalankan alat apa pun sebelum izin dan lingkupnya tertulis.
  • Menyertakan data pribadi orang lain dalam bukti temuan. Perbaikannya adalah meminimalkan bukti sampai kerentanannya cukup terbukti, lalu menghapusnya setelah dikonfirmasi.
  • Mempublikasikan temuan sebelum kerentanannya diperbaiki. Perbaikannya adalah mengikuti alur responsible disclosure dan menunda publikasi sampai waktunya disepakati.
  • Menganggap lingkup otomatis berlaku untuk sistem lain milik pemilik yang sama. Perbaikannya adalah menanyakan setiap target yang tidak tertulis secara eksplisit.

Keempat pola tersebut berpangkal pada asumsi yang sama, yaitu anggapan bahwa tindakan kecil tidak berdampak. Pengujian keamanan menuntut kebalikannya, karena setiap permintaan yang dikirim meninggalkan jejak pada sistem yang dituju. Disiplin pada latihan berskala kecil inilah yang membuat keputusan besar di lapangan tidak sulit diambil.

Ringkasan#

  • Hanya sistem yang memberi izin eksplisit yang boleh diuji, dan pada jalur ini izin itu hadir dalam bentuk localhost serta aplikasi lab seperti OWASP Juice Shop.
  • Lingkup (scope) pengujian memuat target, metode, batas laju, waktu, dan kanal pelaporan, sedangkan butir di luar lingkupnya dilarang.
  • Responsible disclosure menyampaikan temuan kepada pemilik sistem lebih dahulu dan menunda publikasi sampai perbaikan tersedia.
  • Pernyataan lingkup diterjemahkan menjadi pemeriksaan yang dapat dijalankan agar penolakan target di luar lingkup menjadi otomatis.

Referensi#