Pengantar Pengintaian Aplikasi Web¶
Pengintaian aplikasi web mengacu pada fase pengumpulan data eksploratif yang umumnya terjadi sebelum meretas aplikasi web. Pengintaian aplikasi web biasanya dilakukan oleh peretas, penguji pena, atau pemburu bug bounty, tetapi juga dapat menjadi cara yang efektif bagi teknisi keamanan untuk menemukan mekanisme yang keamanannya lemah dalam aplikasi web dan menambalnya sebelum pelaku kejahatan menemukannya. Keterampilan pengintaian (recon) sendiri tidak memiliki nilai yang signifikan, tetapi menjadi semakin berharga ketika dipadukan dengan pengetahuan peretasan ofensif dan pengalaman rekayasa keamanan defensif.
Pengumpulan Informasi¶
Kita sudah tahu bahwa pengintaian adalah tentang membangun pemahaman yang mendalam tentang suatu aplikasi sebelum mencoba meretasnya. Kita juga tahu bahwa pengintaian adalah bagian penting dari perangkat peretas yang handal. Namun sejauh ini, pengetahuan kita tentang pengintaian hanya sampai di situ. Jadi, mari kita bahas beberapa alasan teknis lebih lanjut tentang mengapa pengintaian itu penting.
Peringatan
Banyak teknik pengintaian yang disajikan dalam bab-bab berikut ini berguna untuk aplikasi pemetaan, tetapi juga dapat menyebabkan IP Anda ditandai, yang berpotensi mengakibatkan pemblokiran aplikasi atau bahkan tindakan hukum.
Sebagian besar teknik pengintaian hanya boleh dilakukan terhadap aplikasi yang Anda miliki, atau memiliki izin tertulis untuk mengujinya.
Pengintaian dapat dilakukan dengan berbagai cara. Terkadang, cukup dengan menavigasi aplikasi web dan mencatat permintaan jaringan saja sudah cukup untuk mengenal secara mendalam cara kerja internal aplikasi tersebut. Namun, penting untuk dicatat bahwa tidak semua aplikasi web memiliki antarmuka pengguna yang memungkinkan kita menjelajahi aplikasi secara visual dan mencatat fungsinya.
Sebagian besar aplikasi yang dapat diakses publik (seringkali aplikasi bisnis-ke-konsumen seperti media sosial) akan memiliki antarmuka pengguna yang dapat diakses publik. Namun, kita tidak boleh berasumsi bahwa bahkan dalam kasus ini kita memiliki akses ke seluruh antarmuka pengguna. Sebaliknya, sampai kita menyelidiki lebih lanjut, kita harus berasumsi bahwa kita memiliki akses ke sebagian dari antarmuka pengguna.
Mari kita pikirkan hal ini secara logis selama beberapa menit. Ketika Anda pergi ke MegaBank setempat dan membuka rekening bank baru (misalnya, rekening giro), Anda biasanya juga menerima kredensial login yang memungkinkan Anda memeriksa informasi rekening Anda melalui web. Biasanya, informasi rekening Anda dimasukkan secara manual oleh karyawan bank, seringkali oleh teller bank yang memandu Anda melalui dokumen-dokumen tersebut. Ini berarti bahwa pada suatu saat, orang lain memiliki akses ke web atau aplikasi yang terhubung ke web yang dapat membuat rekening baru di dalam basis data bank.
Lebih lanjut, jika Anda menelepon dan meminta bankir Anda untuk membuka rekening tabungan baru untuk Anda, mereka akan melakukannya. Biasanya mereka akan melakukannya dari jarak jauh selama Anda dapat memberikan kredensial yang benar untuk mengidentifikasi diri Anda dengan benar. Di sebagian besar bank besar, rekening tabungan baru ini akan dapat diakses melalui informasi login yang sama dengan yang sudah digunakan untuk rekening giro Anda.
Dari sini, kita dapat menyimpulkan bahwa seseorang juga memiliki akses ke aplikasi yang memungkinkan mereka mengedit informasi yang relevan dengan rekening Anda (yang sudah ada) untuk menghubungkannya dengan rekening tabungan yang baru dibuat. Aplikasi tersebut bisa sama dengan yang digunakan untuk membuat rekening giro Anda, atau bisa juga aplikasi yang sama sekali berbeda.
Lebih lanjut, Anda tidak dapat menutup rekening bank secara manual secara daring, tetapi Anda dapat dengan mudah datang ke cabang bank setempat dan meminta penutupan rekening Anda. Setelah permintaan Anda dikabulkan, rekening Anda akan ditutup dengan cepat, biasanya dalam beberapa jam.
Anda memiliki akses ke rekening bank Anda untuk memeriksa saldo melalui aplikasi web—tetapi Anda seringkali hanya dapat menggunakan antarmuka ini untuk membaca saldo. Ini berarti Anda memiliki akses baca-saja.
Beberapa bank mungkin mengizinkan kita membayar tagihan atau mentransfer dana secara daring—tetapi tidak ada yang mengizinkan kita (nasabah) untuk membuat, memodifikasi, atau menghapus rekening kita sendiri secara daring. Jadi, bahkan dengan sistem perbankan digital tercanggih sekalipun, nasabah bank hanya memiliki akses tingkat tulis yang terbatas. Namun, administrator bank dan staf tepercaya memiliki izin yang diperlukan untuk memodifikasi, membuat, dan menghapus rekening.
Tidaklah mungkin bagi bank besar untuk mempekerjakan pengembang untuk membuat kueri basis data secara manual untuk setiap operasi yang memodifikasi rekening, jadi secara logis kita dapat mengharapkan bahwa mereka memiliki perangkat lunak tertulis untuk melakukannya meskipun kita tidak dapat mengaksesnya. Kita menyebut aplikasi dengan izin yang terstruktur seperti ini sebagai aplikasi yang dikontrol akses berbasis peran. Sangat sedikit aplikasi saat ini yang hanya menggunakan satu tingkat izin untuk semua pengguna.
Anda mungkin pernah melihat kontrol ini diterapkan pada perangkat lunak yang Anda gunakan sendiri; misalnya, menjalankan perintah berbahaya pada OS Anda mungkin meminta kredensial admin. Sebagai alternatif, banyak situs web media sosial memiliki moderator yang memiliki tingkat izin lebih tinggi daripada pengguna standar, tetapi umumnya berada di bawah admin.
Jika kita menelusuri antarmuka pengguna aplikasi web sendiri, kita mungkin tidak akan pernah menemukan titik akhir API yang ditujukan untuk digunakan oleh pengguna dengan izin yang lebih tinggi ini (seperti admin, moderator, dll.). Namun, dengan penguasaan pengintaian aplikasi web, kita sering kali dapat menemukan API ini. Kita bahkan dapat membangun peta kompleks yang merinci izin lengkap seorang admin atau moderator, sehingga kita dapat membandingkannya dengan izin yang ditetapkan untuk pengguna standar. Terkadang, kita mungkin menemukan gangguan yang memungkinkan pengguna tanpa hak istimewa memanfaatkan fungsionalitas yang hanya ditujukan untuk pengguna dengan hak istimewa lebih tinggi.
Keahlian pengintaian juga dapat digunakan untuk mengumpulkan informasi mengenai aplikasi yang secara harfiah tidak dapat kita akses. Ini bisa berupa jaringan internal sekolah atau server berkas yang dapat diakses jaringan milik perusahaan. Kita tidak memerlukan antarmuka pengguna untuk mempelajari cara kerja sebuah aplikasi jika kita dilengkapi dengan keterampilan yang tepat untuk merekayasa balik struktur API aplikasi dan muatan yang diterima oleh API tersebut.
Terkadang, saat melakukan pengintaian, Anda akan menemukan server atau API yang sama sekali tidak terlindungi. Banyak perusahaan mengandalkan beberapa server, baik internal maupun eksternal. Melupakan satu baris konfigurasi jaringan atau firewall saja dapat menyebabkan server HTTP terekspos ke jaringan publik, alih-alih terkurung di jaringan internal.
Saat Anda memetakan teknologi dan arsitektur aplikasi web, Anda juga akan dapat memprioritaskan serangan dengan lebih baik. Anda akan mendapatkan pemahaman tentang bagian aplikasi mana yang paling aman, dan bagian mana yang membutuhkan sedikit perbaikan.
Pemetaan Aplikasi Web¶
Seiring kita mempelajari bagian buku ini, Anda akan mempelajari cara membuat peta yang merepresentasikan struktur, organisasi, dan fungsionalitas aplikasi web. Penting untuk dicatat bahwa ini umumnya merupakan langkah pertama yang Anda ambil sebelum mencoba meretas aplikasi web. Seiring Anda semakin mahir dalam pengintaian aplikasi web, Anda akan mengembangkan teknik dan metode Anda sendiri untuk mencatat dan mengorganisasikan informasi yang Anda temukan.
Kumpulan titik topografi yang terorganisir dikenal
oleh banyak orang sebagai peta. Istilah topografi berarti studi tentang
fitur, bentuk, dan permukaan lahan. Aplikasi web juga memiliki
fitur, bentuk, dan permukaan. Ini sangat berbeda dari
yang Anda temukan di alam, tetapi banyak konsep yang sama
berlaku. Kita akan menggunakan istilah "peta" di sini untuk mendefinisikan titik data
yang dikumpulkan terkait kode, struktur jaringan, dan
kumpulan fitur suatu aplikasi. Anda akan mempelajari cara memperoleh
data yang diperlukan untuk mengisi peta di beberapa bab berikutnya.
Bergantung pada kompleksitas aplikasi yang Anda uji, dan durasi pengujiannya, Anda mungkin tidak masalah menyimpan peta Anda dalam catatan coretan sederhana. Untuk aplikasi yang lebih tangguh, atau aplikasi yang ingin Anda uji sering dan dalam jangka waktu yang lama, Anda mungkin menginginkan solusi yang lebih tangguh. Bagaimana Anda memilih untuk menyusun peta Anda sendiri pada akhirnya terserah Anda—format apa pun seharusnya memadai asalkan mudah ditelusuri dan mampu menyimpan informasi dan hubungan yang relevan.
Secara pribadi, saya lebih suka menggunakan format seperti JavaScript Object Notation (JSON) untuk sebagian besar catatan saya. Saya menemukan bahwa struktur data hierarkis sangat sering ditemukan dalam aplikasi web, dan struktur tersebut juga memungkinkan saya untuk mengurutkan dan mencari catatan saya dengan lebih mudah. Berikut adalah contoh catatan rekon seperti JSON yang menjelaskan serangkaian titik akhir API yang ditemukan di server API aplikasi web:
{
api_endpoints: {
sign_up: {
url: 'mywebsite.com/auth/sign_up',
method: 'POST',
shape: {
username: { type: String, required: true, min: 6, max: 18 },
password: { type: String, required: true, min: 6: max 32 },
referralCode: { type: String, required: true, min: 64, max: 64 }
}
},
sign_in: {
url: 'mywebsite.com/auth/sign_in',
method: 'POST',
shape: {
username: { type: String, required: true, min: 6, max: 18 },
password: { type: String, required: true, min: 6: max 32 }
}
},
reset_password: {
url: 'mywebsite.com/auth/reset',
method: 'POST',
shape: {
username: { type: String, required: true, min: 6, max: 18 },
password: { type: String, required: true, min: 6: max 32 },
newPassword: { type: String, required: true, min: 6: max 32 }
}
}
},
features: {
comments: {},
uploads: {
file_sharing: {}
},
},
integrations: {
oath: {
twitter: {},
facebook: {},
youtube: {}
}
}
}
Perangkat lunak pencatatan hierarkis seperti Notion, atau aplikasi perangkat lunak pemetaan pikiran seperti XMind, juga merupakan alat yang fantastis untuk digunakan dalam mencatat dan mengorganisir apa yang telah Anda pelajari melalui upaya pengintaian Anda. Pada akhirnya, Anda perlu menemukan metode yang paling sesuai untuk Anda, menjaga Anda tetap terorganisir, sekaligus cukup tangguh untuk diskalakan melampaui aplikasi sederhana bila diperlukan.
Ringkasan¶
Teknik rekon sangat berharga untuk mengembangkan pemahaman mendalam tentang teknologi dan struktur aplikasi web serta layanan yang mendukung aplikasi web tersebut. Selain dapat melakukan rekon terhadap aplikasi web, kita juga harus memperhatikan temuan kita dengan cermat dan mendokumentasikannya dengan cara yang cukup terorganisir untuk memudah ditelusuri di kemudian hari.
Catatan seperti JSON yang disajikan dalam bab ini menjelaskan gaya pencatatan yang saya sukai saat mendokumentasikan upaya rekon saya terhadap aplikasi web. Namun, aspek terpenting dari pencatatan rekon adalah menjaga hubungan dan hierarki sekaligus menjaga catatan tetap mudah dibaca dan ditelusuri secara manual.
Anda harus menemukan gaya dokumentasi yang sesuai untuk Anda, dan dapat diskalakan dari aplikasi kecil hingga aplikasi besar. Jika Anda menemukan gaya atau format alternatif yang lebih sesuai untuk Anda, maka gunakanlah; konten dan struktur catatan jauh lebih penting daripada aplikasi atau format tempat catatan tersebut disimpan.