AI এজেন্ট পুল রিকোয়েস্টের (Pull Requests) মাধ্যমে সিকিউরিটি ফিক্স প্রস্তাব করে
একটি সিকিউরিটি অ্যালার্ট ট্রিগার হয়। একটি LLM প্রেক্ষাপট (context) পড়ে। এটি একটি কনফিগারেশন ফিক্স লেখে। এটি একটি GitHub Pull Request ওপেন করে। দ্বিতীয় একটি LLM কাজটি রিভিউ করে। একজন মানুষ সেই ফিক্সটি মার্জ (merge) করেন।
এজেন্ট কখনোই প্রোডাকশন (production) স্পর্শ করে না। এটি কখনোই নিজে থেকে মার্জ করে না।
সাধারণ Kubernetes কন্ট্রোলারগুলো কেবল রিট্রাই (retry) করে। যদি ভুল কনফিগারেশনের কারণে একটি পড (pod) ক্র্যাশ করে, তবে কন্ট্রোলারটি এটিকে বারবার রিস্টার্ট করতে থাকে। এটি মূল সমস্যার (root cause) সমাধান করে না। সিকিউরিটির ক্ষেত্রেও একই সমস্যা রয়েছে। একটি SIEM অ্যালার্ট প্রদান করে। একজন মানুষকে সেটি পড়তে হয় এবং একটি ফিক্স লিখতে হয়। এই প্রক্রিয়াটি ধীরগতির।
আমরা এটি সমাধানের জন্য একটি এজেন্ট তৈরি করেছি। এটি সিকিউরিটি অ্যালার্ট পড়ে এবং একটি ড্রাফট লেখার জন্য ইনফ্রাস্ট্রাকচার পরীক্ষা করে। এটি কোনো অটোপাইলট (autopilot) নয়। এটি একটি ড্রাফট জেনারেটর। বাকি সবকিছু মানুষের এবং GitOps-এর নিয়ন্ত্রণে থাকে।
এটি যেভাবে কাজ করে:
• Wazuh আক্রমণ শনাক্ত করে এবং একটি ডাটাবেসে অ্যালার্ট সেভ করে। • একটি ব্রিজ নতুন অ্যালার্টগুলো টানে (pull) এবং এজেন্ট শুরু করে। • এজেন্টটি সীমিত টুল ব্যবহার করে। এটি ফাইল পড়তে/লিখতে পারে, ব্রাঞ্চ তৈরি করতে পারে এবং GitHub API ব্যবহার করতে পারে। এটি শুধুমাত্র কনফিগারেশন ফাইল এডিট করে। • ArgoCD রিপোজিটরি পর্যবেক্ষণ করে। একজন মানুষ PR মার্জ না করা পর্যন্ত কিছুই ডেপ্লয় (deploy) হয় না।
আমরা দুটি সেফটি লেয়ার (safety layers) ব্যবহার করি:
কোড চেক। নন-LLM রুলসগুলো ডিফ (diff) যাচাই করে। আমরা পরীক্ষা করি যে পরিবর্তনটি কনফিগারেশন ফাইলের মধ্যেই থাকছে কি না। আমরা পরীক্ষা করি সার্ভার পাথ অ্যালার্টের সাথে মিলছে কি না। আমরা ডিফের সাইজ পরীক্ষা করি। যদি এটি ব্যর্থ হয়, তবে PR বন্ধ হয়ে যায়।
দ্বিতীয় একটি LLM রিভিউ। একটি ভিন্ন মডেল ফ্যামিলি PR টি পড়ে। এটি একটি মতামত প্রদান করে। আমরা একটি ভিন্ন মডেল ব্যবহার করি কারণ মডেলগুলো প্রায়শই নিজেদের মতের সাথে একমত হয়। আমরা মডেলটিকে PR টেক্সট বিশ্বাস না করার নির্দেশও দিই। এটি আক্রমণকারীদের অ্যালার্টের মধ্যে কমান্ড লুকিয়ে রাখা থেকে বিরত রাখে।
ডেভেলপমেন্টের সময় আমরা যা পরিবর্তন করেছি:
• আমরা Cloud LLM থেকে Ollama ব্যবহার করে আমাদের নিজস্ব সার্ভারে চলে এসেছি। এটি ডেটা গোপনীয় রাখে এবং সার্ভিস ইন্টারাপশন প্রতিরোধ করে। • আমরা "ToolCalling" এজেন্টের পরিবর্তে "CodeAgent" ব্যবহার করেছি। ছোট মডেলগুলোর জন্য ক্লিন JSON পাঠানো কঠিন হয়। CodeAgent পরিবর্তে Python লেখে। এটি ত্রুটি এবং ধাপের সংখ্যা ২০+ থেকে কমিয়ে ৩-৮ এ নিয়ে এসেছে। • আমরা "run_shell" টুলের পরিবর্তে নির্দিষ্ট Git টুল ব্যবহার করেছি। এটি "rm -rf"-এর মতো বিপজ্জনক কমান্ড প্রতিরোধ করে। • নেটওয়ার্কের স্থিতিশীলতার জন্য আমরা "push" সেটআপ থেকে "pull" সেটআপে চলে এসেছি।
আমরা LLM-কে একজন দ্রুতগতির জুনিয়র ডেভেলপারের মতো বিবেচনা করি। এর ড্রাফটগুলো কার্যকর কারণ এজেন্ট এবং আপনার প্রোডাকশন এনভায়রনমেন্টের মাঝে মানুষ এবং সেকেন্ডারি চেকগুলো অবস্থান করে।
উৎস: https://dev.to/aisecops/an-ai-agent-that-proposes-security-fixes-as-pull-requests-2hjj
ঐচ্ছিক লার্নিং কমিউনিটি: https://t.me/GyaanSetuAi
