AI Agent Pull Requests ਰਾਹੀਂ ਸੁਰੱਖਿਆ ਸੁਧਾਰ (Security Fixes) ਪ੍ਰਸਤਾਵਿਤ ਕਰਦਾ ਹੈ

ਇੱਕ ਸੁਰੱਖਿਆ ਅਲਰਟ (security alert) ਟ੍ਰਿਗਰ ਹੁੰਦਾ ਹੈ। ਇੱਕ LLM ਸੰਦਰਭ (context) ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ। ਇਹ ਇੱਕ ਕੌਂਫਿਗਰੇਸ਼ਨ ਫਿਕਸ ਲਿਖਦਾ ਹੈ। ਇਹ ਇੱਕ GitHub Pull Request ਖੋਲ੍ਹਦਾ ਹੈ। ਦੂਜਾ LLM ਕੰਮ ਦੀ ਸਮੀਖਿਆ ਕਰਦਾ ਹੈ। ਇੱਕ ਇਨਸਾਨ ਉਸ ਫਿਕਸ ਨੂੰ ਮਰਜ (merge) ਕਰਦਾ ਹੈ।

ਏਜੰਟ ਕਦੇ ਵੀ production ਨੂੰ ਛੂਹਦਾ ਨਹੀਂ ਹੈ। ਇਹ ਆਪਣੇ ਆਪ ਕਦੇ ਮਰਜ ਨਹੀਂ ਕਰਦਾ।

ਆਮ Kubernetes controllers ਸਿਰਫ਼ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ (retry) ਕਰਦੇ ਹਨ। ਜੇਕਰ ਕਿਸੇ ਖ਼ਰਾਬ ਕੌਂਫਿਗਰੇਸ਼ਨ ਕਾਰਨ pod ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ controller ਇਸਨੂੰ ਵਾਰ-ਵਾਰ ਰੀਸਟਾਰਟ ਕਰਦਾ ਰਹਿੰਦਾ ਹੈ। ਇਹ ਮੂਲ ਕਾਰਨ (root cause) ਨੂੰ ਠੀਕ ਨਹੀਂ ਕਰਦਾ। ਸੁਰੱਖਿਆ (Security) ਵਿੱਚ ਵੀ ਇਹੀ ਸਮੱਸਿਆ ਹੈ। ਇੱਕ SIEM ਅਲਰਟ ਜਾਰੀ ਕਰਦਾ ਹੈ। ਇੱਕ ਇਨਸਾਨ ਨੂੰ ਇਸਨੂੰ ਪੜ੍ਹਨਾ ਪੈਂਦਾ ਹੈ ਅਤੇ ਫਿਕਸ ਲਿਖਣਾ ਪੈਂਦਾ ਹੈ। ਇਹ ਪ੍ਰਕਿਰਿਆ ਹੌਲੀ ਹੈ।

ਅਸੀਂ ਇਸ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਇੱਕ ਏਜੰਟ ਬਣਾਇਆ ਹੈ। ਇਹ ਸੁਰੱਖਿਆ ਅਲਰਟਾਂ ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ ਅਤੇ ਡਰਾਫਟ ਲਿਖਣ ਲਈ ਇਨਫਰਾਸਟ੍ਰਕਚਰ (infrastructure) ਨੂੰ ਦੇਖਦਾ ਹੈ। ਇਹ ਕੋਈ ਆਟੋਪਾਇਲਟ ਨਹੀਂ ਹੈ। ਇਹ ਇੱਕ ਡਰਾਫਟ ਜਨਰੇਟਰ ਹੈ। ਬਾਕੀ ਸਭ ਕੁਝ ਇਨਸਾਨੀ ਅਤੇ GitOps ਦੇ ਕੰਟਰੋਲ ਹੇਠ ਰਹਿੰਦਾ ਹੈ।

ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:

• Wazuh ਹਮਲਿਆਂ ਦਾ ਪਤਾ ਲਗਾਉਂਦਾ ਹੈ ਅਤੇ ਅਲਰਟਾਂ ਨੂੰ ਇੱਕ ਡਾਟਾਬੇਸ ਵਿੱਚ ਸੇਵ ਕਰਦਾ ਹੈ। • ਇੱਕ bridge ਨਵੇਂ ਅਲਰਟਾਂ ਨੂੰ ਪੁੱਲ (pull) ਕਰਦਾ ਹੈ ਅਤੇ ਏਜੰਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ। • ਏਜੰਟ ਸੀਮਤ ਟੂਲਸ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਇਹ ਫਾਈਲਾਂ ਨੂੰ ਪੜ੍ਹ/ਲਿਖ ਸਕਦਾ ਹੈ, branches ਬਣਾ ਸਕਦਾ ਹੈ, ਅਤੇ GitHub API ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹੈ। ਇਹ ਸਿਰਫ਼ ਕੌਂਫਿਗਰੇਸ਼ਨ ਫਾਈਲਾਂ ਨੂੰ ਹੀ ਐਡਿਟ ਕਰਦਾ ਹੈ। • ArgoCD ਰੈਪੋ (repo) 'ਤੇ ਨਜ਼ਰ ਰੱਖਦਾ ਹੈ। ਜਦੋਂ ਤੱਕ ਕੋਈ ਇਨਸਾਨ PR ਨੂੰ ਮਰਜ ਨਹੀਂ ਕਰਦਾ, ਉਦੋਂ ਤੱਕ ਕੁਝ ਵੀ ਡਿਪਲੋਏ (deploy) ਨਹੀਂ ਹੁੰਦਾ।

ਅਸੀਂ ਦੋ ਸੁਰੱਖਿਆ ਲੇਅਰਾਂ (safety layers) ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ:

  1. ਕੋਡ ਚੈੱਕ। Non-LLM ਨਿਯਮ diff ਦੀ ਪੁਸ਼ਟੀ ਕਰਦੇ ਹਨ। ਅਸੀਂ ਚੈੱਕ ਕਰਦੇ ਹਾਂ ਕਿ ਕੀ ਬਦਲਾਅ ਕੌਂਫਿਗਰੇਸ਼ਨ ਫਾਈਲਾਂ ਦੇ ਅੰਦਰ ਹੀ ਰਹਿੰਦਾ ਹੈ। ਅਸੀਂ ਚੈੱਕ ਕਰਦੇ ਹਾਂ ਕਿ ਕੀ ਸਰਵਰ ਪਾਥ ਅਲਰਟ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ। ਅਸੀਂ diff ਦੇ ਆਕਾਰ ਦੀ ਜਾਂਚ ਕਰਦੇ ਹਾਂ। ਜੇਕਰ ਇਹ ਫੇਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ PR ਰੁਕ ਜਾਂਦੀ ਹੈ।

  2. ਦੂਜਾ LLM ਰਿਵਿਊ। ਇੱਕ ਵੱਖਰਾ ਮਾਡਲ ਫੈਮਿਲੀ PR ਨੂੰ ਪੜ੍ਹਦਾ ਹੈ। ਇਹ ਆਪਣੀ ਰਾਏ ਦਿੰਦਾ ਹੈ। ਅਸੀਂ ਇੱਕ ਵੱਖਰਾ ਮਾਡਲ ਇਸ ਲਈ ਵਰਤਦੇ ਹਾਂ ਕਿਉਂਕਿ ਮਾਡਲ ਅਕਸਰ ਆਪਣੇ ਆਪ ਨਾਲ ਸਹਿਮਤ ਹੋ ਜਾਂਦੇ ਹਨ। ਅਸੀਂ ਮਾਡਲ ਨੂੰ PR ਟੈਕਸਟ 'ਤੇ ਭਰੋਸਾ ਨਾ ਕਰਨ ਲਈ ਵੀ ਕਹਿੰਦੇ ਹਾਂ। ਇਹ ਹਮਲਾਵਰਾਂ ਨੂੰ ਅਲਰਟ ਵਿੱਚ ਕਮਾਂਡਾਂ ਲੁਕਾਉਣ ਤੋਂ ਰੋਕਦਾ ਹੈ।

ਵਿਕਾਸ (development) ਦੌਰਾਨ ਅਸੀਂ ਕੀ ਬਦਲਿਆ:

• ਅਸੀਂ Cloud LLMs ਤੋਂ Ollama ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਆਪਣੇ ਖੁਦ ਦੇ ਸਰਵਰ 'ਤੇ ਚਲੇ ਗਏ। ਇਹ ਡਾਟਾ ਨੂੰ ਨਿੱਜੀ ਰੱਖਦਾ ਹੈ ਅਤੇ ਸਰਵਿਸ ਵਿੱਚ ਰੁਕਾਵਟਾਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। • ਅਸੀਂ "ToolCalling" ਏਜੰਟਾਂ ਦੀ ਜਗ੍ਹਾ "CodeAgent" ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਛੋਟੇ ਮਾਡਲਾਂ ਨੂੰ ਸਾਫ਼ JSON ਭੇਜਣ ਵਿੱਚ ਮੁਸ਼ਕਲ ਆਉਂਦੀ ਹੈ। CodeAgent ਇਸ ਦੀ ਬਜਾਏ Python ਲਿਖਦਾ ਹੈ। ਇਸ ਨਾਲ ਗਲਤੀਆਂ ਅਤੇ ਕਦਮਾਂ (steps) ਦੀ ਗਿਣਤੀ 20+ ਤੋਂ ਘਟ ਕੇ 3-8 ਰਹਿ ਗਈ। • ਅਸੀਂ "run_shell" ਟੂਲਸ ਦੀ ਜਗ੍ਹਾ ਖਾਸ Git ਟੂਲਸ ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਇਹ "rm -rf" ਵਰਗੀਆਂ ਖ਼ਤਰਨਾਕ ਕਮਾਂਡਾਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। • ਅਸੀਂ ਬਿਹਤਰ ਨੈੱਟਵਰਕ ਸਥਿਰਤਾ ਲਈ "push" ਸੈੱਟਅੱਪ ਤੋਂ "pull" ਸੈੱਟਅੱਪ 'ਤੇ ਚਲੇ ਗਏ।

ਅਸੀਂ LLM ਨੂੰ ਇੱਕ ਤੇਜ਼ ਜੂਨੀਅਰ ਡਿਵੈਲਪਰ ਵਾਂਗ ਮੰਨਦੇ ਹਾਂ। ਇਸਦੇ ਡਰਾਫਟ ਉਪਯੋਗੀ ਹਨ ਕਿਉਂਕਿ ਇਨਸਾਨ ਅਤੇ ਸੈਕੰਡਰੀ ਚੈੱਕ ਏਜੰਟ ਅਤੇ ਤੁਹਾਡੇ production ਵਾਤਾਵਰਣ (environment) ਦੇ ਵਿਚਕਾਰ ਹੁੰਦੇ ਹਨ।

Source: https://dev.to/aisecops/an-ai-agent-that-proposes-security-fixes-as-pull-requests-2hjj

Optional learning community: https://t.me/GyaanSetuAi