
Azure 로그를 수집하고 LLM 추론을 사용하여 의심스러운 활동을 탐지하고, 위험을 평가하며, CLI 명령어가 포함된 복구 플레이북을 생성하는 자동화된 위협 헌팅 파이프라인입니다.
Sentinel-GPT는 사이버 보안 위협 탐지를 위해 특화된 AI 에이전트입니다. 생성된 로그의 소스인 Azure Log Analytics Workspace와 이 에이전트의 두뇌 역할을 하는 OpenAI의 ChatGPT API와 통합되어 있습니다. 의심스러운 활동을 식별하고, 위협을 탐지하며, 사용자에게 알림과 함께 복구 단계를 제공하도록 훈련된 에이전트에 로그를 제공합니다.
git clone https://github.com/Ayush-Parab/cybersecurity-agentic-AI
cd cybersecurity-agentic-AI
pip install -r requirements.txt
.env 파일 생성:OPENAI_API_KEY="your_key"
LOG_ANALYTICS_WORKSPACE_ID="your_id"
입력 로그:
TimeGenerated,Status,User,IPAddress,Computer,SyslogMessage
2026-02-12 02:00:15.912351+00:00,Failure,,,Test-VM-For-Logs,Connection closed by invalid user 98.80.4.65 port 35908 [preauth]
2026-02-12 02:00:15.706067+00:00,Failure,,98.80.4.65,Test-VM-For-Logs,Invalid user from 98.80.4.65 port 35908
2026-02-12 01:59:38.275807+00:00,Success,Ayush,103.38.69.120,Test-VM-For-Logs,Accepted password for Ayush from 103.38.69.120 port 31551 ssh2
2026-02-12 01:59:24.542329+00:00,Failure,,,Test-VM-For-Logs,Connection reset by invalid user balloon 103.38.69.120 port 31573 [preauth]
2026-02-12 01:59:22.850922+00:00,Failure,balloon,103.38.69.120,Test-VM-For-Logs,Failed password for invalid user balloon from 103.38.69.120 port 31573 ssh2
2026-02-12 01:59:17.554208+00:00,Failure,balloon,103.38.69.120,Test-VM-For-Logs,Failed password for invalid user balloon from 103.38.69.120 port 31573 ssh2
2026-02-12 01:59:13.693935+00:00,Failure,,103.38.69.120,Test-VM-For-Logs,Invalid user balloon from 103.38.69.120 port 31573
2026-02-12 01:59:06.649583+00:00,Failure,,,Test-VM-For-Logs,Connection reset by invalid user hamster 103.38.69.120 port 31890 [preauth]
2026-02-12 01:59:03.577720+00:00,Failure,hamster,103.38.69.120,Test-VM-For-Logs,Failed password for invalid user hamster from 103.38.69.120 port 31890 ssh2
2026-02-12 01:58:55.777039+00:00,Failure,hamster,103.38.69.120,Test-VM-For-Logs,Failed password for invalid user hamster from 103.38.69.120 port 31890 ssh2
2026-02-12 01:58:51.167792+00:00,Failure,,103.38.69.120,Test-VM-For-Logs,Invalid user hamster from 103.38.69.120 port 31890
2026-02-12 01:54:50.302217+00:00,Success,Ayush,103.38.69.120,Test-VM-For-Logs,Accepted password for Ayush from 103.38.69.120 port 31565 ssh2
Sentinel-GPT 분석:
예 — 의심스러워 보입니다.
눈에 띄는 점
- 103.38.69.120: 여러 번의 '잘못된 사용자/비밀번호 실패' 시도(hamster/balloon) 후 Test-VM-For-Logs에서 01:54:50과 01:59:38에 Ayush의 SSH 비밀번호 로그인 성공. 이는 무차별 대입/자격 증명 스터핑 후 성공 패턴과 일치합니다. 해당 IP로부터의 두 로그인이 모두 예상된 것인지 Ayush에게 확인하세요.
- 98.80.4.65: 단일 잘못된 사용자 프로브 — 일반적인 스캔일 가능성이 높지만, 필요하지 않으면 차단하세요.
즉시 조치 (Azure 우선)
- 격리: NSG/Azure Firewall에서 103.38.69.120을 차단합니다. TCP/22를 신뢰할 수 있는 IP로만 제한하거나 닫고 Azure Bastion 또는 Defender for Cloud Just‑In‑Time VM 액세스를 사용하세요.
- 자격 증명: 인식되지 않은 Ayush 로그인이 있으면 Ayush의 비밀번호/SSH 키를 재설정하고, 캐시된 자격 증명을 무효화하며, 필요하지 않으면 sudoers에서 제거하고 활성 SSH 세션을 종료합니다.
- SSH 강화: 비밀번호 인증 비활성화(PasswordAuthentication no), SSH 키 또는 Conditional Access MFA가 있는 AADLoginForLinux 적용, sshd 재시작.
- 탐지/대응: VM에서 Microsoft Defender for Servers/Endpoint AV 검사를 실행하고 알림을 검토합니다. 새 사용자, sudoers 변경, 의심스러운 프로세스, authorized_keys 수정 사항을 확인합니다.
다음 사냥 (Log Analytics/Sentinel – KQL)
- 동일 IP에서 무차별 대입 후 성공 (10분 창):
let window=10m;
let ssh = Syslog
| where ProcessName == "sshd" and Facility in ("auth","authpriv")
| extend SrcIP = extract(@"from (\d+\.\d+\.\d+\.\d+)",1, SyslogMessage);
let fails = ssh
| where SyslogMessage has_any ("Invalid user","Failed password")
| summarize FailCount=count(), FirstFail=min(TimeGenerated), LastFail=max(TimeGenerated) by Computer, SrcIP;
ssh
| where SyslogMessage has "Accepted password"
| extend SrcIP = extract(@"from (\d+\.\d+\.\d+\.\d+)",1, SyslogMessage), User = extract(@"for (\S+)",1, SyslogMessage)
| join kind=inner (fails) on Computer, SrcIP
| where TimeGenerated between (FirstFail .. LastFail + window) and FailCount >= 3
| project TimeGenerated, Computer, User, SrcIP, FailCount
- 해당 IP를 모든 VM에서 피벗:
Syslog
| where ProcessName == "sshd" and SyslogMessage has_any ("Invalid user","Failed password","Accepted password")
| extend SrcIP = extract(@"from (\d+\.\d+\.\d+\.\d+)",1, SyslogMessage)
| where SrcIP in ("103.38.69.120","98.80.4.65")
| project TimeGenerated, Computer, SyslogMessage, SrcIP
| order by TimeGenerated desc
검증 및 범위 지정
- 비슷한 시간대의 NSG/VM 변경 사항에 대해 Azure Activity Logs와 상호 참조.
- Defender for Endpoint가 활성화된 경우 Test-VM-For-Logs에서 로그인 후 활동(새 서비스, 비정상적인 아웃바운드 연결)을 확인.
강화 (지속적)
- SSH를 인터넷에 대해 닫아 두고 Bastion 또는 JIT 선호.
- '다중 SSH 실패 후 성공'에 대한 Sentinel 분석 규칙 활성화 및 반복 오류자 차단 목록 적용.
- VM에 fail2ban 설치 및 튜닝.
- OS 패치 및 해당 VM에서 사용된 시크릿 교체.
이 프로젝트는 협업을 위해 열려 있으며 아직 진행 중입니다! 새로운 보안 에이전트나 로그 파서에 대한 아이디어가 있으면 자유롭게 PR을 열어주세요.
연락처: Linkedin