Memperkenalkan Cekin.ai: Perangkat Lunak Gratis untuk Desain Keamanan Otomatis
oleh: Dominikus Kern Bunardi, Mohammad Febri Ramadlan
Masalah
Suatu organisasi biasanya menerapkan serangkaian prosedur sistematis dalam pemanfaatan atau pengembangan sebuah aplikasi. Sebelum prosedur tersebut dimulai, para pemangku kepentingan, khususnya Tim Information Security, perlu melakukan peninjauan mendalam dan analisis komprehensif terhadap berbagai dokumen penting, seperti Product Requirement Document (PRD), Technical Specification Document (TSD), atau Functional Specification Document (FSD). Dalam beberapa situasi, proses evaluasi ini masih dijalankan dengan cara konvensional atau manual, yang menjadikannya rentan terhadap berbagai kesalahan dan meningkatkan potensi risiko dimana aplikasi yang sedang dikembangkan tidak mampu memenuhi standar dan parameter keamanan yang telah ditetapkan. Terlebih lagi, terdapat resiko keterlambatan dalam tahapan pengembangan yang muncul apabila proses peninjauan dan evaluasi tersebut membutuhkan durasi waktu yang relatif panjang.
Tujuan
Berdasarkan informasi tersebut, kami berinisiatif untuk merancang dan mengembangkan sebuah tool bantu inovatif yang mampu memberikan bantuan signifikan kepada pengguna dalam proses verifikasi kesesuaian dokumen teknis dengan standar keamanan yang telah ditetapkan oleh organisasi. Alat ini kami beri nama Cekin.ai, alat yang dirancang dengan tujuan utama untuk berfungsi sebagai sistem otomatis yang dapat secara dramatis meminimalisir durasi waktu yang diperlukan dalam melakukan peninjauan dan analisis terhadap dokumen-dokumen teknikal terkait aplikasi. Tidak hanya itu, Cekin.ai juga didesain untuk memastikan tingkat kepatuhan yang optimal terhadap berbagai aspek keamanan yang kritis, sekaligus mentransformasi seluruh proses menjadi lebih terstruktur, efektif, dan efisien. Dengan demikian, solusi ini menjawab tantangan yang dihadapi dalam proses manual yang rentan kesalahan dan memakan waktu sebagaimana dijabarkan sebelumnya
Pendekatan
Secara umum, dalam pengembangan Large Learning Model (LLM) terdapat 4 pendekatan yang dapat digunakan yaitu prompt engineering, Retrieval-Augmented Generation (RAG), fine-tuning model, dan continuous pretraining. Gambar dibawah ini menunjukan perbandingan empat pendekatan dalam pengembangan LLM berdasarkan biaya, waktu, kualitas, dan kompleksitas.

Berdasarkan Biaya, Waktu, Kualitas, dan Kompleksitas, pendekatan prompt engineering memberikan ruang untuk mengembangkan model secara efisien, tanpa memerlukan proses pelatihan yang intensif dan sumber daya yang besar. Selanjutnya adalah pendekatan Retrieval-Augmented Generation (RAG), pendekatan yang digunakan untuk meningkatkan kualitas respons model dengan memanfaatkan informasi eksternal yang relevan, yang dapat diakses melalui pencarian berbasis retrieval. Oleh sebab itu, dengan menggabungkan pendekatan prompt engineering dan RAG, sistem dapat memberikan jawaban yang lebih akurat dan berbasis data terkini, sekaligus memperluas cakupan pengetahuan model tanpa memerlukan pelatihan ulang yang memakan banyak sumber daya.
Implementasi
Pengembangan proyek ini memanfaatkan Framework Django, yang merupakan kerangka kerja web open-source berbasis bahasa pemrograman Python, dengan menerapkan arsitektur Model-View-Template (MVT) dan dioperasikan dalam lingkungan lokal. Berikut ini disajikan diagram alur (flowchart) yang menggambarkan proses Cekin.ai yang telah dirancang dan diimplementasikan.

Membangun koneksi dengan LLM. Pada kesempatan ini LLM model yang digunakan adalah GPT.
# Set your OpenAI API key
openai.api_key = settings.OPENAI_API_KEY
Pengguna mengunggah dokumen TSD ke aplikasi. Pada fase ini, sistem hanya mendukung unggahan dokumen dalam format PDF. Kemudian file akan disimpan dalam folder media atau cloud storage.

Sistem akan mengekstrak teks dari dokumen standar sebagai acuan peninjauan dan dokumen target agar dapat diproses oleh LLM.
Proses ini dimulai dengan mengambil data dari tempat penyimpanan dokumen
standard_pdf_appsec_path = os.path.join(settings.MEDIA_ROOT, 'standard_pdfs/appsec_standard.pdf')
Proses ekstraksi kata-kata dari dokumen PDF dilakukan dengan memanfaatkan dua library Python, yaitu pdfminer untuk mengekstraksi teks dari dokumen target, dan pytesseract untuk mengekstrak teks dari gambar yang ada dalam dokumen PDF, menggunakan Optical Character Recognition (OCR).
# Process both PDFs to extract text using pdfminer or OCR
standard_text_pages = read_pdf_with_pdfminer(fs.path(standard_pdf_appsec_path)) or ocr_extract_text(fs.path(standard_pdf_appsec_path))
target_text_pages = read_pdf_with_pdfminer(fs.path(target_pdf_path)) or ocr_extract_text(fs.path(target_pdf_path))
Fungsi untuk mencocokan kata kunci. Ditemukan bahwa teks dalam dokumen standar keamanan masih bersifat umum dan lebih berupa pedoman, sehingga kurang fokus pada implementasi spesifik, sebagai contoh pada istilah seperti Bearer dan JWT Token yang digunakan dalam otorisasi dan otentikasi tidak ditemukan dalam dokumen standar. Oleh karena itu, kami menyusun daftar kata kunci yang lebih spesifik dan berkaitan langsung dengan implementasi standar keamanan serta menggabungkannya dengan ekstraksi teks dari dokumen standar. Berikut merupakan contoh untuk item-item yang digunakan.
security_standards = {
'Input Validation': ['Sanitization', 'Regex', 'XSS Prevention', 'SQL Injection', 'validate KYC'],
'Authentication': ['Credentials', 'MFA', 'OAuth', 'Tokens', 'Password Hash', 'Bearer','JWT Token', 'Password Reset'],
'Session Management': ['Session ID', 'Timeout', 'Secure Cookie', 'CSRF', 'Session Expiration', 'jwt token'],
'Communication Security': ['TLS', 'VPN', 'HTTPS', 'Cipher Suite', 'CORS', 'TLS 1.2', 'AES 256','Firewall', 'Security Group', 'VPC Flow Logs', 'SSH Access', 'Port Restrictions'],
'Data Protection': ['Classification', 'Access Control', 'Masking', 'Backup', 'Data Retention', 'EBS Snapshots', 'Disaster Recovery', 'Point-in-time Restore','Encryption', 'Masking', 'Hashing,', 'Key Management', 'AES', 'RSA', 'End-to-End Encryption'],
'Anti-Malware': ['Endpoint Protection', 'Malware Scanning', 'EDR', 'Anti-Virus']
}
Selanjutnya adalah fungsi check_keywords_detail, digunakan untuk memeriksa apakah kata kunci yang terkait dengan standar keamanan ditemukan dalam dokumen target. Fungsi ini membutuhkan 2 input utama yaitu daftar halaman dokumen yang akan diperiksa dan daftar yang berisi kata kunci yang terkait dengan standar keamanan
def check_keywords_detail(pages, security_standards)
Fungsi ini bekerja dengan cara:
Inisialisasi Data: Menyiapkan ‘dict’ untuk melacak status standar keamanan dan detail temuan kata kunci, termasuk halaman dan baris tempat kata kunci ditemukan
summary = []
# Initialize a dictionary to track results for each standard
standard_results = {standard: False for standard in security_standards.keys()}
keyword_occurrences = {standard: {'keywords': [], 'pages': [], 'lines': []} for standard in security_standards.keys()}
Pemeriksaan Halaman: Memeriksa setiap halaman dalam dokumen, mencari kata kunci yang relevan dengan standar keamanan tertentu. Jika kata kunci ditemukan, informasi terkait (kata kunci, halaman, baris) disimpan
for page in pages:
page_text = page['text']
page_number = page['page']
# Check each standard's keywords on a page-by-page basis
for standard, keywords in security_standards.items():
for keyword in keywords:
# Split the page text into lines
lines = page_text.splitlines()
for line_number, line in enumerate(lines):
if keyword.lower() in line.lower():
keyword_occurrences[standard]['keywords'].append(keyword)
if page_number not in keyword_occurrences[standard]['pages']:
keyword_occurrences[standard]['pages'].append(page_number)
keyword_occurrences[standard]['lines'].append((line_number + 1, line.strip()))
standard_results[standard] = True
Evaluasi dengan LLM. Setelah kata kunci ditemukan, fungsi menyusun prompt yang berisi kata kunci dan konteksnya untuk dievaluasi oleh LLM. LLM kemudian menilai apakah kata kunci tersebut relevan dengan standar keamanan yang dibahas. Framework prompt yang digunakan adalah jenis "role-playing" atau "task-based instruction" yang digunakan untuk memberikan peran dan tanggung jawab kepada LLM untuk menilai atau memproses informasi tertentu. Prompt tersebut terdiri dari
+ Peran (Role): peran spesifik (security specialist).
+ Objektif (Objective): tujuan yang jelas (evaluasi kata kunci dalam konteks standar keamanan).
+ Instruksi (Instruction): instruksi terperinci mengenai cara memproses data.
+ Data : data yang digunakan yaitu kata kunci dan halaman.
+ Respon (Response): instruksi format output yang diharapkan
prompt = (
f"You are a security manager that have responsibility to check technical document for app, feature, or implementation, you must asses from security perspective"
f"Please evaluate the following keywords found in the context of the security standard '{standard}':\n"
f"Please check the whole exact lines keyword you found its is contextual relevant with security standard implementation, technique, code or many else,if is not relevant just skip it or not add to summary"
f"Keywords: {list(set(data['keywords']))}\n"
f"Found on pages: {pages_found}\n"
f"Here are the exact lines where the keywords were found:\n"
f"Make it short and concise"
)
Output Hasil: Fungsi ini menghasilkan output yang mencakup status setiap standar (lulus/gagal), kata kunci yang ditemukan, halaman dan baris terkait, serta evaluasi dari LLM

Hasil dari pencocokan kata kunci tersebut akan diproses lebih lanjut oleh LLM untuk menghasilkan ringkasan menyeluruh, mencakup evaluasi dokumen target terhadap standar keamanan serta rekomendasi perbaikan yang diperlukan. Kami menggunakan framework prompt yang sama terdiri dari Peran, Objektif, Instruksi, Data, dan Respon untuk menghasilkan ringkasan yang sesuai dengan kebutuhan. Outputnya dibuat dalam format JSON, sehingga dapat diproses dan ditampilkan dalam tampilan HTML.
prompt = (
f"From the following text: {text}\n\n"
"""
Role:
You are Security Specialist.
Objective:
Assess the compliance of the target technical design document with the security standards outlined in the standard document.
Instruction:
1. **Compliance Summary**:
The Security Standards for Application are:
- 'Input Validation', 'Authentication', 'Session Management', 'Communication Security', 'Data Protection'.
- For each security standard, define its significance in application security.
- After that, review the security design in the target document against these security standards.
- Identify compliance based on explicit mentions and implicit implementations.
2. **Pass/Fail Overview**:
- Provide a count of how many standards passed versus those that failed.
- The formula for calculating the fail count is: `fail_count = total_standards - pass_count`.
Data:
The provided text represents the target technical design document that you need to evaluate.
Response:
Please provide the summary in this output format, just only the output:
{
"pass_count": <number>,
"fail_count": <number>,
"pass_standards": [<list of passed standards>],
"fail_standards": [<list of failed standards>],
"recommendation": "<short recommendation>"
}
Make sure the output is valid JSON.
"""
)
Agar LLM dapat mengingat pesan-pesan sebelumnya, kami membuat list conversation_history. List ini berisi pesan-pesan penting, seperti informasi tentang dokumen standar, dokumen target, hasil pengecekan, ringkasan, dan pesan yang diberikan oleh pengguna. Hal ini dapat membantu LLM mempertahankan konteks percakapan. Setiap elemen dalam daftar mencakup atribut "role" (peran) dan "content" (isi pesan) yang membantu LLM memahami konteks dan memberikan respons yang lebih akurat. Pada initial prompt, instruksi yang diberikan harus memiliki peran dan batasan yang jelas. Tugas LLM hanya menilai kesesuaian dokumen desain teknis target dengan standar keamanan yang ditetapkan.
conversation_history = [
{ "role": "system","content": "You are an focused information security assitant ONLY to Assess the compliance of the target technical design document with the security standards outlined in the standard document"},
{"role": "system", "content": f"standard document: {standard_path}"},
{"role": "system", "content": f"target document: {target_path}"},
{"role": "system", "content": f"Check results: {results1}"},
{"role": "system", "content": f"Summary: {summary}"},
{"role": "system", "content": f"target text: {target_text}"},
]
Pengguna dapat mengajukan pertanyaan kepada LLM untuk membantu memeriksa lebih lanjut dokumen target yang ingin ditinjau, LLM akan memproses pertanyaan dan memberikan jawaban. Pertanyaan dari pengguna akan ditambahkan ke conversation_history agar LLM dapat mengingat konteks dan percakapannya.
if request.method == 'POST' and 'conversation_history' in request.POST:
try:
# Load conversation history from the session
conversation_history = request.session.get('conversation_history', [])
conversation_history_new = json.loads(request.POST.get('conversation_history', '[]'))
conversation_history += conversation_history_new
gpt_response = ask_gpt_question(conversation_history, standard_text, target_text, target_pdf_path, results1, summary, request)
conversation_history.append({'role': 'system', 'content': gpt_response})
Gambar di bawah ini merupakan tampilan webview Cekin.ai

Tidak hanya itu, terdapat pula fitur quick question yang disediakan untuk memudahkan pengguna mengajukan pertanyaan yang sama atau umum selama proses pengecekan. Visualisasi dapat dilihat pada gambar 5 di bawah.

Tahap terakhir dalam sistem Cekin.ai adalah menyimpan hasil tinjauan ke database. Harapannya data ini akan diolah lebih dalam untuk kebutuhan jangka panjang di masa yang akan datang. Di bawah ini adalah gambar ketika data berhasil disimpan.

Kesimpulan
Cekin.ai adalah sebuah tool inovatif yang dikembangkan untuk mengatasi masalah dalam proses peninjauan keamanan dokumen teknis aplikasi yang saat ini masih banyak dilakukan secara manual oleh organisasi. Tool ini menggunakan pendekatan Large Learning Model (LLM) dengan kombinasi prompt engineering dan Retrieval-Augmented Generation (RAG), diimplementasikan melalui Framework Django dengan sistem ekstraksi teks dari dokumen PDF, pencocokan kata kunci terkait standar keamanan, evaluasi konteks dengan LLM, serta fitur percakapan interaktif. Sistem ini berhasil mengotomatisasi proses peninjauan dokumen keamanan, meningkatkan efisiensi waktu, mengurangi kesalahan manusia dan risiko keterlambatan, serta memberikan output berupa ringkasan kepatuhan terhadap standar keamanan, identifikasi standar yang lulus/gagal, dan rekomendasi perbaikan yang dapat disimpan dalam database untuk analisis jangka panjang.
Apa Berikutnya?
Setelah berhasil meningkatkan kualitas respons melalui prompt engineering dan konsep RAG, tahap selanjutnya dalam proyek ini adalah mengembangkan sistem Cekin.ai dengan memanfaatkan teknologi RAG yang lebih kompleks. Pada tahap ini, kami akan membangun dan mengintegrasikan Knowledge Base yang berisi informasi relevan yaitu dokumen acuan standar keamanan langsung ke model LLM.
Tidak hanya itu, kami mengajak dan mengundang teman-teman praktisi, akademisi, komunitas AI/cybersecurity, dan lainnya untuk dapat bergabung dalam pengembangan proyek ini. Kami percaya, setiap kontribusi kecil kita, bisa menciptakan dampak dan perubahan yang lebih baik.
Referensi
A. O. Al-Ansari and T. M. Alsubait, "Predicting Cyber Threats Using Machine Learning for Improving Cyber Supply Chain Security," 2022 Fifth National Conference of Saudi Computers Colleges (NCCC), Makkah, Saudi Arabia, 2022, pp. 123-130.
Arslan, M., Ghanem, H., Munawar, S., & Cruz, C. (2024). A Survey on RAG with LLMs. Procedia Computer Science, 246, 3781–3790.
A. T. Neumann, Y. Yin, S. Sowe, S. Decker and M. Jarke, "An LLM-Driven Chatbot in Higher Education for Databases and Information Systems," in IEEE Transactions on Education, vol. 68, no. 1, pp. 103-116, Feb. 2025.
Center for Internet Security, "CIS Benchmarks." [Online]. Available: https://www.cisecurity.org/cis-benchmarks. Accessed: Feb. 24, 2025.
OpenAI, "ChatGPT" ChatGPT, 2025. [Online]. Available: https://chat.openai.com/. Accessed: Feb. 20, 2024.
OWASP, "Application Security Verification Standard (ASVS)," OWASP Foundation. [Online]. Available: https://owasp.org/www-project-application-security-verification-standard/. Accessed: Feb. 24, 2025.
Vidivelli, S., Ramachandran, M., & Dharunbalaji, A. (2024). Efficiency-Driven Custom Chatbot development: unleashing LangChain, RAG, and Performance-Optimized LLM fusion. Computers, Materials & Continua/Computers, Materials & Continua (Print), 80(2), 2423–2442.
Tentang Penulis

Dominikus Kern Bunardi
Lulusan sistem informasi Universitas Indonesia dengan pengalaman di bidang application security dan konsultan IT. Terlibat dalam berbagai kompetisi hackathon dan memiliki sertifikasi ISC2 Certified in Cybersecurity, INE Cloud Associate, serta AI Security and Governance. Memiliki fokus pada solusi keamanan aplikasi, komputasi awan, dan kecerdasan buatan (AI). Linkedin: https://www.linkedin.com/in/dominikus-kern/

Mohammad Febri Ramadlan
Information Security, Data Privacy and Open Source Contributor.
Last updated