배경
•
AD의 중요성
◦
중앙 집중식 관리의 필요성 → 기업의 사용자 인증, 권한 관리에 용이하다는 장점
◦
사이버 공격의 주요 표적 → 공격 성공 시, 기업 내부 접근 및 정보 탈취를 통한 큰 피해 유발 가능성 높음
•
AD중 Samba인 이유
◦
무료 제공 → 비용 부담이 적음, 소규모의 기업에서도 활용 가능
◦
오픈소스 → 자유롭게/유연하게 설정 및 활용 가능
◦
Windows AD 및 리눅스와의 호환성
⇒ 오픈소스이기에 공격자 또한 취약점 탐지/발견에 용이함, 인증과정의 취약점을 활용한 공격 가능성이 높음
위 사항들을 고려하여 Samba AD의 취약점을 탐지하는 프로그램을 구현하고자 함
서비스 소개
•
시연 영상
•
전체 기능 소개(기본 정보, 위험성 진단, 알림 서비스)
◦
기본 정보 탐지 : 포트 정보, 버전, 사용자 리스트, 권한, 그룹, 공유 폴더, 비밀번호 정책 등
◦
위험성 진단 : 비정상 접근이나 공격에 노출 가능성이 있는 설정 점검, 모의 공격 시도를 통한 공격 성공 가능성 점검
◦
알림 서비스 : 포트로 들어오는 트래픽 감시, 비정상 접근/공격 발생 시 실시간 알림
•
기능 별 세부 소개
◦
기본 정보
▪
포트 현황 : nmap을 이용한 Samba 관련 포트들의 개방상태 확인
▪
enum4linux : 등록된 이용자의 username, 권한 유형, 그룹 유형, Samba 버전, 공유 폴더 정보, 비밀번호 정책
◦
위험성 진단
▪
쉘코드 : Samba의 취약한 설정이나 상태를 점검할 수 있는 쉘코드, 15가지 유형의 진단 가능
▪
익스플로잇: PoC 코드를 활용한 모의 공격 시도로 공격 노출 가능성을 점검
◦
알림 서비스
▪
수리카타를 이용한 Samba 포트 대상으로 실시간 감시, 비정상 접근/공격 발생 시 디스코드나 텔레그램, 프로그램에 실시간 알림 제공
•
부가 기능
◦
이전 로그 확인
◦
디스코드 알림
소규모 기업의 Samba AD 관리자 입장에서 손쉽게 사용할 수 있는 프로그램을 제작
•
타 프로그램 비교
아키텍처 및 핵심 기능
데이터 흐름
단계 | 입력 데이터 | 처리 방식 | 출력 데이터 |
사용자 입력 | IP 주소 | Django 서버로 전달 | IP 검사 요청 |
취약점 탐지 | IP 주소 | .sh 파일 실행 및 정보 수집 | 취약점 검사 결과 |
모의 해킹 시도 | 취약점 정보 | Exploit 수행 | 공격 성공 여부 |
이상 감지 | 네트워크 트래픽 | Suricata 분석 | 이상 감지 로그 및 알림 |
CVE 정보 매핑 | 취약점 검사 결과 | CVE DB 매핑 | 관련 CVE 정보 |
결과 저장 및 리포트 생성 | 검사/모의 해킹/감지 정보 | MongoDB 저장 | 리포트 생성 |
웹 인터페이스 출력 | 리포트 요청 | Django 서버 처리 | 결과 및 실시간 로그 표시 |
DB구조
DB 이름 | 테이블/컬렉션 이름 | 설명 | 필드 |
Suricata Logs | logs | Suricata에서 탐지된 네트워크 로그 저장 | date, time, sid, message |
adSentinel DB | VulCheck | 취약점 체크리스트 및 대응 절차 정보 저장 | VulC_Id, VulC_Level, VulC_Title, VulC_Des, VulC_CP, VulC_TgtSrv, VulC_Check, VulC_Sec, VulC_SecProc, VulC_Imp, VulC_Cate, VulC_SecRisk, VulC_Script |
cve_db | Samba 관련 CVE 정보 저장 | CVE_name, categories, CVE_Detail, score_data (Base Severity, CVSS Vector, Impact Score, Score Source), samba_version | |
exploit | 테스트에 사용된 Exploit 정보 저장 | name, description, category, script, status (Secure, Danger) | |
exploit_result | Exploit 실행 결과 저장 | name, target_ip, username, output, error, timestamp ($date), status | |
scan_results | nmap 및 enum4linux 스캔 결과 저장 | ip_address, timestamp ($date), nmap_results (open_ports (port, service), unknown_ports (port, state, service)), enum4linux_results (samba_version, target_os, domain, users, password_policy, full_output) |
아키텍쳐
핵심기능
취약점 탐지
15개의 정해진 항목으로 취약점 탐지 후 현재 상태 / 취약한 부분 / 보안 방법 안내
CVE 위험성 안내
취약점 탐지를 기반으로 위험성 높은 CVE 안내
EXPLOIT TEST
모의해킹 테스트로 안전한 상태인지 침투 가능한 상태인지 확인
실시간 알림
Suricata 룰을 사용하여 이상 감지 시 웹 / 디스코드에 실시간 알림
기존 보고서 열람
기존에 검사한 내용 열람 및 pdf 출력
활용 라이브러리 및 개발 환경
환경
AWS
Ubuntu
VMware
Kali
언어 & 개발 도구
Visual Studio Code
Bash
Python
라이브러리
Metasploit
Nmap
enum4linux
기술 스택
Suricata
Django
MongoDB
Html5
JavaScript
Css3
Etc
Github
Discord
Notion
Zep
Draw.io
트러블 슈팅
취약점 탐지 3분 이상 소요
•
15개의 .sh파일을 순서대로 처리하다 보니 시간이 많이 소요되는 것을 확인
•
병렬 처리로 빠르게 소요되도록 수정
from concurrent.futures import ThreadPoolExecutor
# ThreadPoolExecutor를 사용하여 병렬 처리
with ThreadPoolExecutor() as executor:
adsentinel_results = list(executor.map(process_item, inspection_items))
Python
복사
AWS 외부 접근 불가
•
AWS 접근 권한 관리
◦
AWS에서 IAM에 접속, 사용자를 생성하고, 사용자 별 접근 권한 등의 정책 설정
•
AWS 인스턴스의 보안 그룹에 인바운드 규칙 설정
◦
AWS 콘솔 > EC2 > 보안 그룹 > 인스턴스에 연결된 보안 그룹 선택 > 인바운드 규칙 편집
•
Ubuntu 방화벽(UFW) 설정
◦
Ubuntu에서 아래의 포트 허용 설정을 진행
◦
방화벽 상태 확인 및 적용
sudo ufw allow 445/tcp
sudo ufw allow 139/tcp
sudo ufw allow 137,138/udp
sudo ufw allow 389/tcp
sudo ufw allow 53/tcp
sudo ufw allow 135/tcp
Bash
복사