Stress Testing and Penetration Testing

Helmi Alfarel
5 min readMay 25, 2021

--

Performance Testing

Tujuan utama dari performance testing adalah melakukan benchmark pada perilaku sistem. Namun, tujuan dari performance testing bukan untuk mencari kecacatan pada suatu sistem maupun lolos atau tidaknya test, melainkan lebih bagaimana kita dapat mengukur suatu batas untuk menjadi benchmark sehingga sistem memenuhi standar yang diperlukan. Benchmark tersebut bisa saja seperti, latency, resource, memory usage, cpu saturation, cpu utilization, throughput, dll.

Contoh :

Melakukan perbandingan connection speed dan pengaruhnya terhadap latency atau pengaruh CPU dengan load average di setiap instance server.

Stress Testing

Stress Testing bermaksud untuk memastikan apabila ada kegagalan pada sistem dan memonitor bagaimana sistem dapat pulih kembali (health state). Masalah-masalah yang tak terduga biasanya dilakukan pada test ini. Pengujian sinkronisasi, memory leaks, race conditions dll. Stress Testing sendiri merupakan subset dari Performance Testing.

Tujuan dari Stress Testing:

  • Menganalisis laporan pasca terjadinya system crash dan bagaimana perilakunya terhadap hal tersebut.
  • Jika ada komponen yang rusak secara parah, diharapkan mitigasi yang cukup baik sehingga dapat meminimalkan kerusakan dan sistem kembali berjalan dengan normal.

Load Testing

Load Testing dimaksudkan untuk melakukan test pada sistem secara konstan dan selalu bertambah bebannya sampai sistem tersebut mencapai batas / limit.

Load Testing bisa dilakukan dengan mudah karena banyak tools yang sudah ada seperti wrk, apache benchmark (ab), locust, dll.

Tujuan dari Load Testing:

  • Mengekspos kecacatan pada aplikasi seperti buffer overflow, memory leaks, dan mismanagement memory.
  • Menentukan batas atas dari komponen-komponen sistem, seperti database, hardware, network, dll.
  • Menentukan SLA (Service Level Agreement) pada suatu aplikasi.

Testing yang dilakukan adalah Load Testing pada web aplikasi kita http://dev-raising-star.herokuapp.com/.

Pada environment staging, kami menggunakan heroku sebagai penyedia host untuk backend. Sebelum mulai melakuan load test pada servis backend, kita perlu terlebih dahulu tahu mengenai spesifikasi sistem yang menyediakan layanan host. Heroku yang digunakan adalah tipe Free untuk saat ini, namun apabila server yang diberikan oleh pihak penyedia sudah memiliki IP Publik dan bisa diakses dari luar, maka kami akan menggunakan server tersebut.

Spesifikasi dari sistem Heroku (Free) adalah sebagai berikut:

RAM: 512 MBDeploy from git : YESUnified logs : YESNumber of process types : 2Always on : Sleeps after 30 mins of inactivity, otherwise always on depending on your remaining monthly free dyno hours.SSL : NOHorizontal Scaling : NO

Selanjutnya, kita jalankan aplikasi backend (Django) pada layanan heroku tersebut dan untuk WSGI-nya (Web Server Gateway Interface) kami menggunakan Gunicorn.

Setelah aplikasi sudah di-deploy, maka load test dapat dilakukan. Environment untuk melakukan load test yang digunakan adalah Apache Benchmark dan Cloud Shell (host untuk mengeksekusi load test).

Berikut adalah tahapan untuk melakukan load test pada web kelompok kami.

  1. Install apache benchmark : apt-get install apache2-utils
  2. Jalankan load test pada backend dengan jumlah request 100 dan 10 request per runtime.
  3. Hasil dari eksekusi dengan apache benchmark

Jika kita lihat dari 100 request, semuanya berhasil masuk dengan rata-rata 0.14 request per detik dan 7 detik per request. Menunjukkan bahwa web kami cukup lambat.

Penetration Test

Penetration Test (Pentest) adalah bentuk simulasi penyerangan untuk mengetahui kerentanan pada suatu sistem. Sistem tersebut dicek kerentanannya (dalam kasus ini Web Application) bisa melewati APIs, Frontend Server, Backend Server, Misconfigured settings, Unsanitized input dan masih banyak lagi.

Beberapa area yang dijadikan pengujian pentesting (dalam kasus aplikasi web):

Application Penetration Testing

Bagian ini mengidentifikasi kelemahan sistem pada lapisan aplikasi seperti CSRF (Cross Site Request Forgery), XSS (Cross Site Scripting), Injection Flaws, Weak Session Management, Insecure Direct Object References (IDOR), dan lain-lain.

Network Penetration Testing

Bagian ini mengidentifikasi kelemahan pada network dan sistem seperti Misconfiguration, Wireless Network Vulnerabilities, Rogue Services, Weak Passwords, dan Protocols.

Adapun tahapan-tahapan dalam melakukan pentesting adalah sebagai berikut.

Planning and Recon

  • Menentukan scope dan tujuan dalam melakukan test, seperti target dan metode yang digunakan.
  • Mengumpulkan informasi-informasi seperti (jaringan, nama domain, nama mail server, email) untuk memahami bagaimana target tersebut dan potensi kerentanan didalamnya.

Scanning

Tahap ini untuk memahami bagaimana aplikasi target meresepon dari percobaan penyerangan. Biasanya dilakukan dengan:

  • Static Analysis

Static Analysis berupa inspeksi terhadap source code aplikasi dan bagaimana cara kerjanya.

  • Dynamic Analysis

Dynamic Analysis lebih ke bagaimana aplikasi berjalan dan scanning dilakukan dengan melihat behaviour aplikasi program tersebut.

Gaining Access

Tahapan ini melakukan penyerangan web aplikasi, seperti XSS, Backdoors, SSRF, RCE (Remote Code Execution). Tester akan mencoba dan meng-exploit kerentanan tersebut untuk melakukan privilege escalation, pencurian data, account takeover, dan lain-lain.

Maintaining Access

Tujuan pada tahap ini untuk melihat bagaimana kerentanan dapat dipergunakan untuk mendapatkan akses tetap di dalam sistem yang ter-exploit dalam jangka waktu cukup lama. Simulasi dibuat untuk meniru ancaman persisten yang biasanya ada di dalam sistem selama berbulan-bulan untuk mencuri data sensitif organisasi.

Analysis

Hasil dari penetration test dibuat menjadi sebuah laporan detail, seperti:

  • Kerentanan apa yang dapat dieksploitasi
  • Data sensitif apa saja yang dapat diakses
  • Berapa lama pentester dapat berada di dalam sistem tanpa diketahui.
  • Dampak apa saja yang mungkin terjadi jika pada sistem terdapat Post-Exploitation.

Berikut adalah salah satu contoh penerapan Recon dan Scanning ketika melakukan Penetration Testing. kita melakukan scanning dengan menggunakan Nmap

Dari Nmap kita tahu bahwa servis tersebut hanya terbuka port 443 dengan menggunakan webserver ec2 amazon aws. Port 443 adalah port utama digunakan untuk HTTPS (encrypted) traffic.

Selanjutnya kita coba untuk melakukan scanning pada path directory web menggunakan dirsearch

Jika dilihat terdapat beberapa endpoint seperti admin, accounts/login dan /media. Hal ini menunjukkan bahwa hacker dapat mengakses file2 seperti gambar dan audio melalui /media.

Hal ini cukup critical karena hacker dapat mencuri data-data penting dalam bentuk gambar, audio, video dan format lainnya. Jika ini merupakan aplikasi pinjaman online, maka hacker dapat mencuri foto-foto ktp pengguna aplikasi.

Sekian artikel tentang Load dan Penetration Test, semoga bermanfaat.

https://www.cloudflare.com/learning/security/glossary/what-is-penetration-testing/

https://www.softwaretestinghelp.com/what-is-performance-testing-load-testing-stress-testing/

--

--

No responses yet