Mengamankan API di API Gateway

Zeping Bai

November 4, 2022

Technology

Kata Pengantar

Pada Juni 2021, hampir 92% data pengguna LinkedIn bocor melalui API publik yang tidak memiliki kontrol keamanan. Data yang terekspos tersebut dijual ke publik di pasar gelap, mencakup 700 juta nama pengguna, data pribadi, alamat email, nomor telepon, dan detail lainnya. Meskipun LinkedIn menganggap peristiwa ini sebagai pengambilan data publik daripada akses ilegal, hal ini tetap menekankan pentingnya langkah-langkah keamanan API.

Sebagai antarmuka eksternal untuk aplikasi dalam menyediakan layanan, API terus-menerus terpapar pada lalu lintas eksternal, menghadapi penyerang yang menggunakan serangan denial of service, injeksi, dan kerentanan yang diketahui untuk menyerang. Misalnya, pada Desember 2020, penyerang memanfaatkan cacat log4j 2 untuk melakukan serangan yang tidak dikonfigurasi terhadap API. Oleh karena itu, perlu untuk memperkuat kemampuan API dalam menangkal penyerang jahat ini. Namun, sebelum kita mengambil langkah-langkah untuk mengamankan API, mari kita pahami terlebih dahulu apa itu API.

Apa itu API?

API tradisional (Application Programming Interface) merujuk pada pustaka tautan statis atau dinamis perangkat lunak untuk memanggil fungsinya. Pengembang dapat menggunakan kembali fungsi yang disediakan oleh perangkat lunak yang ada berdasarkan panggilan ke API-nya, seperti TCP/IP, yang disediakan oleh sistem operasi.

Dengan berkembangnya sistem perangkat lunak dan jaringan, istilah "API" sekarang merujuk pada antarmuka sistem yang diakses melalui jaringan. Klien memanggil antarmuka ini menggunakan protokol seperti HTTP untuk menjalankan fungsi klien, seperti meminta informasi cuaca dari Weather API.

Secara asli, API merujuk pada saluran yang disediakan oleh sistem perangkat lunak untuk layanan lain, yang mendefinisikan spesifikasi interoperasi di antara berbagai subsistem. Layanan autentikasi, misalnya, menyediakan antarmuka untuk login pengguna, pendaftaran, dan pengambilan informasi pengguna. Layanan lain dapat menggunakan antarmuka panggilan ini untuk menyelesaikan fungsi autentikasi pengguna. Demikian pula, melalui API, subsistem dapat bekerja sama untuk menyelesaikan tugas seluruh aplikasi.

Apa itu Keamanan API?

Setelah gambaran umum tentang API, kita akan memperkenalkan keamanan API. Keamanan API melibatkan tiga perspektif utama:

Keamanan Informasi (InfoSec): Dari perspektif informasi, memastikan bahwa informasi telah dilindungi selama pembuatan, transmisi, penyimpanan, dan penghancuran dalam seluruh siklus hidupnya.

Keamanan Jaringan (NetSec): Dari perspektif jaringan, memastikan bahwa data yang ditransmisikan melalui jaringan tidak disadap atau dirusak, dan bahwa tidak ada individu yang tidak berwenang mengakses jaringan.

Keamanan Aplikasi (AppSec): Dari perspektif sistem aplikasi, memastikan bahwa aplikasi yang dikembangkan dapat mencegah serangan jahat.

Keamanan API adalah persimpangan dari ketiga aspek ini, yang berarti ketiga aspek tersebut tidak dapat diabaikan jika Anda ingin melakukan pekerjaan yang baik dalam keamanan API.

image.png

Serangan Keamanan API yang Umum

OWASP, proyek keamanan aplikasi web terbuka, telah menerbitkan daftar 10 masalah keamanan API yang umum OWASP API Security Project | OWASP Foundation.

Daftar tersebut mencakup masalah berikut:

Broken Object Level Authorization: Pengguna mengakses objek data yang tidak seharusnya mereka akses.

Broken User Authentication: Kesalahan implementasi layanan autentikasi memungkinkan pengguna melewati mekanisme autentikasi untuk mengakses API secara ilegal.

Excessive Data Exposure: Memungkinkan pengguna mendapatkan data sensitif yang berlebihan, yang seharusnya dilarang.

Lack of Resources & Rate Limiting: Kurangnya pembatasan pada jumlah sumber daya yang dibutuhkan untuk memenuhi permintaan pelanggan, serta volume permintaan yang realistis.

Broken Function Level Authorization: Pengguna mengakses API fitur yang tidak seharusnya mereka akses.

Mass Assignment: Pengguna secara tidak sengaja mengubah data yang tidak mereka izinkan untuk diedit melalui antarmuka yang dikembangkan dengan tidak benar.

Security Misconfiguration: Konfigurasi keamanan yang tidak tepat untuk API.

Injection: Input data yang tidak tepercaya memicu SQL, injeksi perintah, eksekusi perintah yang tidak terduga, atau akses data.

Improper Assets Management: Mengelola sumber daya API dengan tidak benar, seperti merilis API untuk lingkungan pengujian atau versi API lama yang tidak benar.

Insufficient Logging & Monitoring: Sulit untuk mengidentifikasi anomali keamanan menggunakan metode audit karena tidak adanya alat pencatatan dan pemantauan untuk akses API.

Setelah mengetahui masalah umum terkait keamanan API, apa yang harus dilakukan untuk melindungi API?

Bagaimana Melindungi API Anda?

Dalam hal melindungi API, langkah-langkah juga dapat diambil dari tiga perspektif:

InfoSec: Kita dapat membangun sistem kerahasiaan informasi sesuai dengan kebijakan hukum dan persyaratan keamanan untuk menghindari pengungkapan informasi pribadi.

NetSec: Enkripsi dan verifikasi transmisi data diperlukan.

AppSec: Kita perlu memperkuat keamanan aplikasi.

Berikut adalah beberapa praktik tambahan untuk keamanan API.

Enkripsi konstan: Kita dapat mencegah penyadapan data dan manipulasi data yang disebabkan oleh jaringan yang tidak dikelola melalui pengaturan TLS aliran penuh. Selain itu, juga perlu mengaktifkan mTLS untuk memverifikasi kebenaran sisi klien guna mencegah akses yang tidak sah.

Gunakan token dengan hati-hati: Kita perlu berhati-hati dalam menggunakan JWTs karena memungkinkan klien untuk mendekodekannya, yang dapat mengungkap informasi rahasia jika digunakan dengan tidak benar. Selain itu, kita akan kesulitan ketika mencabut sesi login tertentu karena penerapan prosedur pencabutan rumit karena keterbatasannya.

Granularitas Izin yang Lebih Kecil: Berikan izin minimal untuk akses API dan data untuk menghindari kemungkinan akses yang tidak sah.

Validasi input: Jangan pernah mempercayai nilai input dari klien. Anda harus memvalidasi nilai input klien untuk memastikan mereka memenuhi persyaratan keamanan.

Pembatasan kecepatan: Batasi kecepatan akses API. Langkah ini mencegah serangan denial-of-access, yang terjadi ketika sistem dibanjiri dengan permintaan yang tidak dapat ditangani sekaligus.

Pencatatan dan pemantauan: Merancang mekanisme pencatatan dan pemantauan yang tepat untuk sistem memungkinkan kita untuk mengidentifikasi peristiwa keamanan dan mengambil tindakan yang tepat dengan cepat. Kita juga dapat kembali ke masa lalu setelah peristiwa keamanan informasi untuk mengidentifikasi sistem dan data yang terpengaruh dan menentukan sejauh mana kebocoran data potensial.

Langkah-langkah di atas mengharuskan kita untuk melakukan perubahan tertentu pada sistem aplikasi dengan memproses komponen individu, yang tidak hanya sangat mahal tetapi juga rentan terhadap masalah lebih lanjut.

Bagaimana kita dapat menerapkan langkah-langkah keamanan tanpa membahayakan layanan aplikasi?

API Gateway

API gateway menawarkan jalur baru di luar transformasi sistem, yang secara signifikan mengurangi biaya transformasi dan menyediakan manajemen lalu lintas masuk yang terpusat dan terpadu. Fitur keamanan yang kaya juga ditawarkan oleh API gateway, yang memungkinkan kita untuk melarang dan mencatat kunjungan yang tidak sah.

Dengan menggunakan Apache APISIX sebagai contoh, bagian berikut akan menjelaskan beberapa skenario aplikasi API gateway untuk mengamankan API.

Enkripsi (TLS/mTLS)

Anda tidak hanya dapat mengaktifkan TLS untuk API untuk menawarkan akses HTTPS, tetapi juga mengaktifkan mTLS untuk memverifikasi identitas klien. Secara alami, Anda juga dapat mengaktifkan TLS/mTLS untuk layanan upstream untuk menjamin keamanan lalu lintas saat melintasi jaringan internal. Anda dapat merujuk ke manual mTLS untuk mengaktifkan fungsionalitas yang diperlukan.

Verifikasi Identitas

Semua koneksi dapat dienkripsi, tetapi ini tidak menjamin keamanan API. Oleh karena itu, dalam pengaturan bisnis nyata, kita harus menyertakan komponen yang terkait dengan autentikasi. Untuk mengatasi masalah ini, APISIX menawarkan berbagai plugin yang terhubung dengan autentikasi yang dapat dengan mudah diintegrasikan dengan layanan autentikasi eksternal atau langsung melalui gateway. Plugin ini berkisar dari yang lebih sederhana seperti LDAP, OpenID Connect, dan Open Policy Agent hingga yang lebih kompleks seperti Basic Auth, Key Auth, JWT Auth, dan Forward Auth.

Pembatasan Kecepatan

Kurangnya Sumber Daya dan Pembatasan Kecepatan adalah dua serangan yang sering terjadi. Untuk situasi ini, gateway biasanya menyertakan plugin terkait pembatasan kecepatan; begitu juga dengan Apache APISIX. Ini menawarkan tiga plugin: limit-count, limit-req, dan limit-conn, yang memberikan fitur pembatasan kecepatan permintaan, pengukuran permintaan, dan pembatasan koneksi. Mereka dapat membantu mengontrol tekanan akses API secara efektif dan mencegah sistem dari kelebihan beban dengan jumlah permintaan yang tidak dapat dikelola.

Pembatasan Keamanan

APISIX menawarkan plugin CORS dan CSRF untuk memberikan perlindungan lintas domain dan pemalsuan permintaan lintas situs untuk API, lebih meningkatkan kemampuannya untuk melindungi keamanannya. Selain itu, plugin pembatasannya memungkinkan kemampuan untuk memblokir IP, UA, Referer, dan URI, yang dapat menangkal sebagian besar serangan API.

Verifikasi Input

APISIX menyediakan plugin request-validation, yang memungkinkan penyedia API untuk memvalidasi input pengguna melalui jsonschema. Data terstruktur dan bahasa deskripsi aturan validasi dapat digunakan dengan baik untuk validasi data.

Observabilitas

Metode yang tercantum di atas adalah cara untuk melindungi API. Namun, tidak ada sistem yang sepenuhnya aman. Setelah sistem diserang, kita harus bertindak cepat untuk menentukan penyebab serangan dan mencegah kerusakan lebih lanjut dari serangan tersebut. Sebagai hasilnya, APISIX juga menawarkan berbagai plugin pencatatan, yang dapat mengirim log ke berbagai tujuan, termasuk Kafka, Clickhouse, dan solusi logging-as-a-service yang ditawarkan oleh penyedia cloud seperti Google Cloud, Splunk, dll.

Selain itu, APISIX menawarkan fungsionalitas pelacakan tautan dengan docking ke Skywalking, OpenTelemetry, dan program pelacakan lainnya.

Selain itu, APISIX menyediakan plugin Prometheus, yang dapat menghitung dan mengekspor metrik terkait permintaan API ke layanan pemantauan Prometheus untuk membantu mengidentifikasi masalah kinerja dan mencegah gangguan layanan sistemik.

Kita dapat mengidentifikasi potensi insiden keamanan tepat waktu dengan membuat sistem cukup teramati.

Kemampuan Pemrograman

Terakhir, APISIX juga menawarkan plugin serverless untuk mengatasi kerentanan 0-day, memungkinkan pengguna untuk menggunakan kode Lua untuk menjalankan beberapa logika saat permintaan datang. Kita dapat memanfaatkan fungsionalitas ini untuk sementara memblokir beberapa kerentanan 0-day saat muncul.

Kesimpulan

Keamanan API sangat penting bagi penyedia layanan, sehingga pengembang harus berusaha untuk tetap memperbaruinya. Untuk menunjukkan bagaimana API gateway dapat digunakan dalam berbagai pengaturan aplikasi, artikel ini menggunakan Apache APISIX sebagai contoh, yang merupakan strategi baru yang berbeda dari modifikasi sistem yang membantu pengembang dalam mengurangi biaya masalah keamanan.

Tags: