Contoh serangan yang ditemukan dalam log akses
(nishtahir.com)- Log akses dari IP publik yang telah self-hosting selama lebih dari 10 tahun memperlihatkan upaya serangan yang rutin diterima layanan yang terekspos ke internet, mulai dari pencarian kredensial hingga injeksi perintah yang menargetkan perangkat IoT
- Pola yang paling umum adalah penelusuran file konfigurasi dan direktori seperti
.env,.aws/credentials,.git/config,backup/, dantest/, dan sebagian permintaan memakai User-Agent dengan salah ketik sepertiMozlila/5.0 - Upaya Shellshock menyisipkan payload berbentuk fungsi Bash ke User-Agent untuk membaca
/etc/passwd, sambil berulang kali menebak berbagai jalur CGI - Serangan yang menargetkan LuCI dan Zyxel mencoba menyisipkan perintah ke antarmuka web router dan perangkat embedded untuk mengunduh serta menjalankan skrip jarak jauh dan biner untuk berbagai arsitektur
- Perlu mengurangi hal yang diekspos ke internet publik, menerapkan autentikasi dan pembatasan IP pada alat atau direktori yang diperlukan, serta menjaga perangkat IoT tetap mutakhir dan, bila memungkinkan, memisahkannya dari jaringan publik
Trafik yang diterima layanan yang terekspos ke internet publik
- Selama lebih dari 10 tahun melakukan self-hosting, penulis terus melanjutkan pengalaman memiliki data sendiri secara langsung dan mengurangi ketergantungan pada platform selain host cloud
- Begitu sebuah IP terekspos ke internet publik, banyak trafik berbahaya langsung masuk, dan dari log akses dapat ditelusuri serangan apa saja yang baru-baru ini diterima
- Analisis ini lebih merupakan pengamatan seorang developer yang penasaran daripada forensik oleh pakar keamanan
- Alamat IP penyerang dan sebagian ungkapan menghina yang digunakan oleh beberapa penyerang disamarkan sebagai langkah kehati-hatian
Pencarian kredensial dan file konfigurasi
- Serangan yang paling umum adalah upaya mencari kredensial melalui penelusuran direktori, dan permintaan terhadap file
.envtampak sangat sering- Contoh jalur permintaan:
/laravel/.env,/backend/.env,/api/.env,/.env,//.env, dan sebagainya .envumumnya diperlakukan sebagai file yang menyimpan secret aplikasi
- Contoh jalur permintaan:
- File terkait AWS dan konfigurasi repositori Git juga termasuk target penelusuran
- Contohnya
/aws.yml,/.env.bak,/info.php,/.aws/credentials,/config/aws.yml,/.git/config, dan sebagainya
- Contohnya
- Direktori umum yang mungkin tertinggal secara tidak sengaja juga diminta berulang kali
- Contohnya
/old/,/new/,/test/,/backup/,/temp/, dan sebagainya
- Contohnya
- Sebagian User-Agent memuat
Mozlila/5.0, yang tampak seperti salah ketik dariMozilla/5.0- Hasil pencarian GitHub mengisyaratkan bahwa salah ketik ini mungkin dibuat oleh alat yang umum dipakai lalu disalin-tempel
- Permintaan yang mencari alat akses jarak jauh atau alat konfigurasi juga ikut teramati
- Contohnya
/actuator/gateway/routes,/hudson,/ui/login.action,/?XDEBUG_SESSION_START=phpstorm, dan sebagainya
- Contohnya
- Ke internet publik sebaiknya hanya mengekspos hal yang benar-benar minimum yang diperlukan, dan bila alat atau direktori harus diekspos, perlu ada lapisan autentikasi serta, jika memungkinkan, pembatasan ke IP tertentu
Upaya Shellshock
- Sejumlah permintaan tampak menargetkan kerentanan Shellshock
- Serangan ini menargetkan eksekusi perintah arbitrer pada web server yang menjalankan skrip CGI dengan versi Bash yang rentan
- Saat program CGI dimulai, variabel lingkungan diatur dari isi permintaan, dan
HTTP_USER_AGENTadalah salah satunya - Jika ada karakter seperti
() { :; };, Bash menafsirkannya sebagai fungsi yang harus dijalankan
- Saat program CGI dimulai, variabel lingkungan diatur dari isi permintaan, dan
- User-Agent dalam log nyata berisi payload seperti berikut
() { ignored; }; echo Content-Type: text/html; echo ; /bin/cat /etc/passwd() { ignored; };adalah bentuk definisi fungsi Bashecho Content-Type: text/html; echo ;mencetak Content-Type respons HTTP dan satu baris kosong/bin/cat /etc/passwdadalah perintah untuk menampilkan isi/etc/passwdyang berisi informasi akun pengguna
- Jika serangan berhasil, hal itu dapat berlanjut pada akses ke kredensial pengguna dan eksekusi kode arbitrer di server
- Seperti pada penelusuran direktori, penyerang menebak jalur umum seperti
/cgi-bin/status,/cgi-bin/stats,/cgi-bin/test,/cgi-bin/status/status.cgi,/test.cgi,/debug.cgi,/cgi-bin/test-cgi
Injeksi perintah yang menargetkan LuCI
- Satu permintaan tampak menargetkan LuCI, antarmuka web untuk router OpenWRT
- URL serangan disusun untuk menyisipkan perintah ke field
countryagar dapat mengunduh dan menjalankan skrip shelltenda.shdari server jarak jauh- Setelah URL didekode, perintahnya mengikuti alur berpindah ke
/tmp, menghapus file, mengambil skrip denganwget, memberi izin eksekusi, lalu menjalankannya
- Setelah URL didekode, perintahnya mengikuti alur berpindah ke
- Skrip yang diunduh berisi isi untuk mengunduh dan menjalankan biner tambahan
- Tercantum nama yang tampak sebagai arsitektur target seperti
mips,mpsl,x86_64,arm,arm5,arm6,arm7,i586,i686,powerpc,sh4,m68k,sparc - Pendekatan mencoba biner untuk banyak arsitektur tampak dimaksudkan untuk memperluas cakupan serangan saat penyerang tidak mengetahui arsitektur perangkat target
- Tercantum nama yang tampak sebagai arsitektur target seperti
- Untuk penyelidikan lanjutan, penulis mengunduh biner yang tidak kompatibel dengan lingkungannya lalu memeriksanya dengan Ghidra
- Awalnya hanya ada 3 fungsi dan tidak banyak data string
- Di area data yang besar ditemukan string
$Info: This file is packed with the UPX executable packerdanUPX 3.94
- Itu adalah biner ELF yang dikompresi dengan UPX, dan jika header UPX atau packed binary tidak dimodifikasi, biner dapat dibuka dengan
upx -d- Memang, setelah menjalankan
upx -d mips, ukuran file bertambah dari34932menjadi93732, dan lebih banyak string dapat diperiksa
- Memang, setelah menjalankan
- Di dalam string biner yang telah dibuka terdapat
M-SEARCH * HTTP/1.1,ST: urn:dial-multiscreen-org:service:dial:1, dan payload XML untuk upgrade perangkat Huawei- Ini tampak sebagai perintah UPnP untuk mencari perangkat di jaringan yang mendukung protokol DIAL
- Payload XML itu tampak dikonfigurasi untuk memindai perangkat Huawei yang rentan terhadap injeksi perintah
- Perilaku ini tampaknya telah diidentifikasi sebagai bagian dari botnet Mirai
- File
yeye.mipsyang dirujuk tidak tersedia saat dicoba diambil- Hasil menjalankan
nmappada server hanya menemukan port terbuka22/tcp sshdan646/tcp filtered ldp
- Hasil menjalankan
Injeksi perintah yang menargetkan Zyxel
- Permintaan lain berisi perintah shell di dalam URL GET, dan setelah substitusi shell
${IFS}dihapus, bentuknya menjadi lebih mudah dibaca- Perintah yang telah dirapikan mengikuti alur berpindah ke
/tmp, menghapus file*mips*, mengunduhhuhu.mips, memberi izin eksekusi, lalu menjalankannya dengan argumenzyxel.selfrep
- Perintah yang telah dirapikan mengikuti alur berpindah ke
- Serangan ini tampak menargetkan eksploit
zhttpdpada perangkat Zyxel - Biner kali ini tidak dalam keadaan packed, sehingga string-nya bisa langsung diperiksa di Ghidra
- String yang terlihat mencakup
M-SEARCH * HTTP/1.1, headerSTterkait DIAL,skyljne.arm,skyljne.arm5,skyljne.arm6,skyljne.arm7,skyljne.mips,skyljne.mpsl,skyljne.x86_64,skyljne.sh4, dan sebagainya - Juga ada payload XML yang menargetkan perangkat Huawei untuk mengunduh
huhu.mipsdan menjalankannya sebagaiselfrep.huawei
- String yang terlihat mencakup
- String lain memuat perintah untuk mengirim POST ke
/goform/set_LimitClient_cfg- Bersama header
Cookie: user=admin, perintah itu mencoba menyisipkan perintah ke parametermacuntuk mengunduh dan menjalankanhuhu.mpsl - Menurut tulisan Akamai, kerentanan ini menargetkan router dan dapat dieksploitasi tanpa autentikasi sebelumnya karena tidak ada pemeriksaan autentikasi maupun otorisasi yang memadai
- Bersama header
- Biner ini sangat mungkin merupakan agen botnet Mirai
- Sebagian sumber juga menyebut kemungkinan keterkaitannya dengan Linux Medusa
Respons dari sudut pandang operasional
- Log yang diperiksa hanyalah sebagian dari keseluruhan, dan masih banyak eksploit lain yang dicoba setiap hari
- Penting untuk menjaga perangkat, terutama perangkat IoT, tetap mutakhir
- Jika memungkinkan, perangkat IoT sebaiknya tidak diekspos langsung ke internet publik
- Jika memang harus diekspos, sebaiknya diisolasi ke VLAN terpisah sejauh mungkin
1 komentar
Komentar Hacker News
Menariknya, sebagian penyerang tampaknya memantau log Certificate Transparency untuk mencari sertifikat yang baru diterbitkan.
Jika server baru dibiarkan berjalan di IP baru selama lebih dari seminggu, log akses hanya menunjukkan beberapa pemindaian acak. Namun, sekitar satu jam setelah mendapatkan sertifikat Let’s Encrypt, beberapa kali pernah terjadi ratusan permintaan seperti yang disebutkan dalam artikel datang membanjir.
Kesimpulannya, layanan baru harus dibuat aman secepat mungkin, idealnya sebelum diekspos ke internet.
Atau bisa juga memakai certificate authority sendiri, lalu menggunakan sertifikat self-signed dan mTLS sampai saat peralihan.
Misalnya, jika suatu software mengekspos begitu saja layar instalasi awal seperti pembuatan akun admin atau koneksi DB, itu menjadi lebih berisiko dibandingkan menetapkannya sejak awal lewat environment variable, file konfigurasi, atau tool khusus pengelolaan secret.
Misalnya mencari domain dalam periode tertentu.
Merkle Town[0] dari Cloudflare berguna untuk melihat gambaran umum, tetapi saya belum menemukan cara mudah untuk mengkueri log CT, dan ct-woodpecker[1] juga terlihat menjanjikan.
[0] https://ct.cloudflare.com/
[1] https://github.com/letsencrypt/ct-woodpecker
VPN sekarang sudah sangat bagus sehingga lebih menenangkan, dan untuk hal seperti hosting foto atau backup, saya khususnya tidak ingin mengeksposnya secara publik.
Saat mulai mengelola situs yang saya host sendiri, saya juga melihat log akses, dan untuk sementara memakai sistem deteksi intrusi yang mengumpulkan data serta menampilkan percobaan serangan yang masuk.
Pada akhirnya saya berhenti meninjau log secara proaktif maupun membayar biaya sistem deteksi intrusi; itu buang-buang waktu dan mengalihkan perhatian.
Materi yang merangkum kerentanan dan serangan umum mudah ditemukan, jadi itu bisa dijadikan standar administrasi server. Untuk setiap teknologi web server yang umum ada banyak panduan best practice, dan dengan menjalankan semuanya 100%, Anda sudah jauh lebih maju daripada hampir semua penyerang.
Setelah itu, cara terbaik menggunakan waktu dan sumber daya adalah memprioritaskan siklus patch secepat mungkin. Sebagian besar serangan menargetkan kerentanan yang sudah dipublikasikan.
Log terutama berguna saat mendiagnosis setelah masalah terjadi. Software analisis log membantu 2–3 kali untuk menyimpan, mencari, dan menemukan akar penyebab serangan yang berhasil, dan setiap kali penyebabnya adalah kerentanan yang sudah diketahui tetapi dipatch terlalu terlambat.
Solusinya adalah pertahanan berlapis, dan untuk layanan pribadi yang di-host sendiri, kebanyakan cukup mudah diterapkan.
Letakkan firewall di depan atau sembunyikan di balik VPN/Tailscale, dan sembunyikan di subfolder seperti
/mawer/phpmyadmin/alih-alih/phpmyadmin/yang ditargetkan serangan otomatis, maka 99,9% tidak akan menemukannya. Ini disebut security by obscurity dan tidak boleh menjadi satu-satunya andalan, tetapi sangat berguna sebagai lapisan tambahan.Masukkan aplikasi ke sandbox dan isolasi server agar meski disusupi, sulit bergerak ke tempat lain, serta simpan log agar bisa memastikan apakah terjadi serangan dan apakah serangan itu berhasil.
Intinya, jangan bergantung hanya pada satu sarana pertahanan, baik itu patch maupun firewall. Pada akhirnya salah satunya akan gagal.
Saat ini saya mencoba memperbarui paket setiap kuartal[0], tetapi akan bagus jika ada tool yang memberi tahu kerentanan yang diketahui sehingga bisa segera ditangani.
[0] Di sini “mencoba” berarti jika ada breaking change yang sulit diterapkan ke versi terbaru, atau rilis X.0.0 yang belum saya percayai, saya tidak bisa langsung upgrade.
Karena penulis mengatakan bukan pakar keamanan, untuk memperbaiki bagian kecil: contoh di awal adalah pencarian kredensial dan konfigurasi, bukan directory traversal.
Setahu saya, directory traversal adalah istilah untuk teknik ketika penyerang “keluar” dari web root atau menipu server agar menyajikan file di luar direktori normal.
"/../../passwd/etc".Setidaknya menurut pengalaman saya, poin pentingnya adalah banyak serangan seperti ini berasal dari aktor negara yang bermusuhan.
Mungkin kontroversial, tetapi memblokir seluruh rentang IP dari negara bermasalah yang tidak akan Anda ajak bertransaksi bisa berguna. Dengan cara ini saya pernah memblokir 100% percobaan pemindaian yang masuk ke satu layanan baru.
Sebagian besar pemindaian yang masuk ke server saya berasal dari Amerika Serikat, dan jauh di posisi kedua adalah Belanda. Mungkin sebagian besar berasal dari AWS dan data center lain.
Saya bekerja di bidang keamanan aplikasi/produk, dan selama bertahun-tahun mengelola WAF untuk perusahaan bernilai miliaran dolar
Cukup pindahkan DNS ke Cloudflare dan pasang beberapa aturan WAF di situs. Misalnya, jika skor bot di bawah 2, berikan managed challenge, atau tangani saat skor serangan mencapai nilai tertentu. Kemungkinan biayanya juga nyaris tidak ada, dan banyak masalah akan teratasi
Namun sebelum dipindahkan ke produksi, wajib diuji. Memiliki satu domain uji juga bagus. WAF bukan solusi mujarab, lebih dekat ke penanganan sementara; kalau aplikasi itu sendiri tidak diperkuat agar tahan serangan, WAF secanggih apa pun atau proteksi bot tidak akan bisa menyelamatkannya
Free Managed Ruleset sepertinya didistribusikan secara default, dan Cloudflare menyimpan changelog di sini: https://developers.cloudflare.com/waf/change-log
Berjalan sangat baik. Karena yang mengakses hanya keluarga, konfigurasinya juga mudah, dan masing-masing mendapat sertifikat unik yang bisa dicabut bila perlu
Sepertinya Anda paham bidang ini, jadi saya penasaran apakah Anda pernah mengelola solusi yang memakai infrastruktur Azure bersama Cloudflare; kalau pernah, selain hal umum seperti OWASP, apakah ada hal-hal yang sering terlewat orang?
Kalau suatu perusahaan, karena alasan tertentu, benar-benar harus menjalankan sesuatu yang tidak mutakhir, mungkin itu diperlukan, tetapi pada akhirnya tetap hanya penanganan sementara
Saya sudah sekitar setahun melakukan self-hosting server HTTP/S 400 baris yang saya rancang sendiri, dan jumlah trafik serangan yang masuk lewat 3 port terbuka (22, 80, 443) sungguh mengejutkan
Namun saya belum meluangkan waktu untuk menganalisis apa yang sebenarnya coba dilakukan penyerang, dan tulisan ini mengisi banyak kekosongan
Akan menarik juga kalau hal-hal aneh yang terlihat di
/var/log/auth.logdianalisis dengan cara yang samaSemua kodenya open source dan tidak ada state di sisi server, jadi rasanya aneh kalau penyerang sengaja menargetkan saya. Hal terbaik yang bisa didapat penyerang hanyalah akses root ke VPS seharga 5 dolar per bulan dan defacement sementara pada domain yang tak dikunjungi siapa pun
Kalau membuka 3 port paling terkenal, koneksi pasti masuk; mereka bahkan tidak tahu dan tidak peduli apa yang Anda jalankan
Mereka juga bisa meng-host malware atau menjalankan penambang kripto
ISP saya sebenarnya jarang sekali mengubah IP, dan kalau berubah saya bisa login ke panel admin web hosting lalu memperbarui aturannya
Saya selalu menjalankan fail2ban di setiap server, dan juga menambahkan jail kustom untuk menangkap serangan yang disesuaikan dengan jenis fitur situs yang diekspos
Namun sudah lama saya tidak memastikan apakah default lain dari fail2ban masih cukup untuk menahan serangan umum. Sepertinya tautan ini perlu saya bookmark agar bisa dilihat nanti
Saya juga memeriksa access log dari layanan yang saya self-host, dan ada detail yang terasa cukup mencolok absen dari analisis ini
Sebagian besar request berbahaya hanyalah orang biasa yang menjalankan security scanner yang mudah didapat di tempat seperti GitHub. Umumnya serangannya tidak canggih, dan instance proyek semacam ini menghantam server tanpa melihat respons dan tanpa peduli apakah sudah dibatasi atau belum
Beberapa serangan tidak menargetkan IP secara langsung, melainkan memantau domain dan subdomain, lalu secara berkala mengulang scan yang sama dari rentang IP yang sama
Di tempat kerja lama, scan berulang terus datang dari satu IP statis di Turki sampai tim mulai menyebutnya “orang Turki”, dan ketika melihat pola request aneh, langkah pertama dalam respons insiden adalah memeriksa apakah orang itu sedang mengutak-atik layanan kami
Kalau Anda melihat log seperti ini di AWS, tolong sebaiknya pasang AWS WAF di depan VPC
Tidak mahal, dan dalam situasi seperti ini cukup membantu mengurangi banyak kerepotan. Meski tidak bisa memblokir semua hal yang mencapai layanan, itu tetap bisa sangat membantu
Beberapa aturan yang terlalu agresif diam-diam merusak sebagian aplikasi
Ada aturan body request yang memblokir jika body request berisi
"localhost", dan ada juga aturan yang memblokir request tanpa header User-Agent. Karena sebelumnya kami tidak mewajibkan User-Agent untuk request API, seluruh API sebagian pengguna rusak sampai kami menemukan penyebabnyaAnda harus tahu apa yang diblokir dan memverifikasinya terlebih dahulu; kalau tidak, dalam kasus tertentu Anda bisa kehilangan pelanggan
Mudah dilewati tetapi memberi ilusi bahwa sudah aman, biaya performanya juga besar, dan kemungkinan memblokir trafik sah pun cukup tinggi: https://www.macchaffee.com/blog/2023/wafs/
Misalnya, para peneliti di universitas kami meneliti data Twitter, tetapi IP universitas diblokir oleh sebagian besar WAF hanya karena mereka mengikuti tautan dari sampel kecil tweet yang acak
Kadang terpikir bahwa akan menarik membuat server Express yang merespons salah satu serangan seperti ini dengan benar, agar membuang-buang waktu seseorang
Namun jika begitu, waktu saya juga ikut terbuang
[1] https://infosec.exchange/@gnyman/109318464878274206
[2] https://nyman.re/super-simple-ssh-tarpit/