Menghalang Serangan - Serangan Dasar Web Dari Sisi Ingress Nginx (Infrastruktur)

September 20, 2022

Menghalang Serangan - Serangan Dasar Web Dari Sisi Ingress Nginx (Infrastruktur)

Menghalangi serangan pada aplikasi berbasis web merupakan sebuah PR yang sangat panjang. Di tulisan ini saya akan mencoretkan beberapa langkah awal melakukan pertahanan terhadap serangan-serangan yang "biasa" terjadi. Penghalang ini diterapkan di sisi Infrastruktur.


Latar belakang

Pada dasarnya hampir semua serangan pada aplikasi berbasis web menggunakan HTTP Request, sehingga hal pertama yang bisa dilakukan adalah melakukan filtering terhadap request yang diterima applikasi tersebut.

Filtering terhadap request yang masuk tersebut, disebut WAF (Web Application Firewall).

Sudah banyak berbagai penyedia WAF ternama seperti Imperva, Cloudflare, hingga untuk skala bisnis lebih besar seperti Akamai.

Untuk saat ini Cloudflare merupakan penyedia WAF yang memberikan layanannya secara cuma-cuma kepada para penggunanya. Hanya cukup menggunakan NS milik Cloudflare, pengguna sudah bisa mengaktifkan WAF secara Gratis.

Masalah

Bypass Cloudflare

Ketika pengguna mengaktifkan WAF dari cloudflare, maka semua request yang masuk ke domain tersebut akan diarahkan menuju reverse proxy milik Cloudflare yang sudah diberikan filtering untuk menyaring semua request yang masuk. Namun apabila seseorang menemukan IP dibalik dari WAF tersebut. Maka dia bisa leluasa melakukan pointing langsung dari /etc/hosts miliknya pribadi untuk melakukan bypass terhadap WAF cloudflare.

Pendekatan Untuk Dilakukan

Pada dasarnya tidak ada tolak ukur yang pasti untuk mengukur sebuah sistem "Aman", namun seperti kata Voltaire "Perfect is the enemy of good".

Penggambaran di bawah dapat digunakan juga dalam hal Security Design. Tolak ukur untuk melakukan hardening yang "secure" mutlak selamanya adalah tak terhingga.

Secure is infinite

Tujuan kita ada di titik "Something" agar mengurangi point of attack hingga seminim mungkin. Untuk mencapai itu ada beberapa pendekatan yang dapat dilakukan.

1. Jangan Pernah Mematikan WAF

Jangan mematikan WAF dari penyedia seperti Cloudflare. Dikarenakan dapat meng-ekspose alamat IP origin server dibalik WAF tersebut, dan tersimpan selamanya di record list seperti Security Trails, dnsdumpster.

2. Aktifkan ModSecurity & OWASP ModSecurity CRS (Ingress Nginx)

Mengaktifkan ModSecurity Pada Ingress

  • ConfigMaps
apiVersion: v1
data:
  allow-snippet-annotations: "true"
  enable-modsecurity: "true"
  enable-owasp-modsecurity-crs: "true"
kind: ConfigMap
metadata:
  name: ingress-nginx-controller
  • Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: bwapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/modsecurity-snippet: |
      SecRuleEngine On

Perbandingan ketika mengaktifkan ModSecurity tersebut.

Untuk melakukan testing terhadap efisiensi dari ModSecurity di sini saya melakukan spawning bwapp. Full deployment dapat dilihat di https://github.com/nicolasjulian/bwapp-k8s

  • Melakukan serangan terhadap paramter rentan title, berjalan dengan sangat mudah.

Bwapp SQL Injection

  • Melakukan serangan terhadap paramter rentan title, dengan metode yang sama. Namun tidak berhasil seperti sebelumnya.

Dapat juga terlihat ada 249 request yang mendapatkan balikan 403 (Forbidden) dapat dipastikan penghalang yang dipasang bekerja dengan baik.

Bwapp SQL Injection - Prevented

  • Penampakan logs yang masuk ke ingress ketika aplikasi web tersebut mendapat percobaan serangan SQL Injection. Semua request yang dianggap abusive diblok oleh ModSecurity.

Ingress Traffic Logs

Percobaan Bypass ModSecurity dengan Tampering SQLMAP

Saya mencari berbagai bypass yang untuk filtering dari ModSecurity tersebut, salah satunya yang saya coba seperti gambar di bawah. Namun metode tersebut tidak berhasil.

python3 sqlmap.py  -u "https://bwapp.staging.nicolas.my.id/sqli_1.php?title=aa&action=search"  --cookie='PHPSESSID=kt0q1vf9dfdushriq9kdd5vj23; security_level=0' --tables --level 5 --random-agent --batch

Try Bypass ModSecurity

Secara garis besar kita sudah berada pada titik lebih baik daripada sebelumnya. SQL Injection tidak bisa dilakukan dengan sangat mudah.

ModSecurity only is not enough to protect your website You need to fix the BUG.

3. Ketahui Aset Kita Yang Terekspos

Lakukan aset discovery terhadap infrastruktur kita sendiri. Dengan melakukan subdomain enumeration menggunakan simple tools seperti Amass, Subfinder, knockpy, atau gunakan Security Trails.

Lakukan pencarian sensitif informasi seperti environment variable, password, ip address. Menggunakan tools seperti Truffle Hog.

Jika kita menemukan sesuatu yang semestinya tidak ter-ekspose ke publik, maka sebaiknya segera kita lakukan mitigasi pada temuan tersebut.

4. (Cloudflare as Front Liner) Hanya Izinkan Subnet Cloudflare

Salah satu pencegahan yang mudah dilakukan untuk menghindari bypass cloudflare adalah, dengan mengizinkan hanya subnet cloudflare saja yang boleh mengakses port dari service kita. Informasi tersebut dapat ditemukan di https://www.cloudflare.com/ips. Hal ini seharusnya dapat dilakukan juga pada sistem WAF yang lain.

Referensi


Profile picture

Written by Nicolas Julian Seseorang yang mencoba berkarya. Chit Chat with me in Twitter