Code&Data Insights
[새싹 성동 2기] Splunk 설치 및 분석 실습 (+ security onion) 본문
[새싹 성동 2기] Splunk 설치 및 분석 실습 (+ security onion)
paka_corn 2024. 12. 15. 16:15Splunk 설치
1. Splunk 실행
dpkg -i packegname
cd /opt/splunk/bin
./splunk enable boot-start // q(quit) 후, 사용할 id, password 입력
./splunk start // 실행 후 출력된 URL로 접속 가능
2. Forwarder 설치
// index 생성: 홈페이짖 상단 Settings > indexes, test로 생성
cd /opt/splunk/etc/system/local로 이동
3. inputs.conf 생성 및 설정
mousepad inputs.conf
[splinktcp:9997] // 서버 수신 대기 포트
disabled = false 설정 // (사용 O)
4. Splunk 재시작
./splunk restart
5. Forwarder 설치 (우분투)
cd /home/kali/Desktop/splunkforwarder //forwarder설치 파일 존재하는 경로
python3 -m http.server 8080
dpkg -i packegname //curl 설치 후 다시 설치
apt install curl -y
6. apache 설치 (우분투)
apt install apache2 -y
systemctl start apache2
7. forwarder 설정 (우분투) - inputs.conf / outputs.conf
cd /opt/splunkforwarder/etc/system/local
mousepad inputs.conf || mousepad outputs.conf
[monitor://var/log/apache2/access.log]
disabled = false
index = test //생성할 index 이름
sourcetype = access_apache // index에 저장될 그룹 이름
8. kali linux에서 우분투 apache 서버 접속
9. forwarder 실행 (우분투)
cd /opt/splunkforwarder/bin
./splunk start
Splunk 접속
DATA/ Indexes - 일종의 DB
-> 시스템 기본 index들은 disable, 삭제 불가능
DATA/ Source Types - DB를 구성하는 테이블 정보
-> 이미 알려진 로그들의 필드 정보를 가지고 있음
KNOWLEDGE Fields - column
-> Field extractions
[ Splunk search ]
Search & Reporting
** 검색하는 시간 설정 중요
- index="name"으로 기본 서치
earliest =0 을 붙임으로써 모든 시간 검색
특정시간은 오른쪽 시간정보에서 범위 지정 가능
분석 시, sourcetype and field가 핵심
1. 소스타입은 내가 분석해야하는 데이터 유형을 볼 수 있음
ex) sysmon 로그, apache log, http proxy 로그 등
==> 소스타입을 분석함으로써 내가 위협데이터 분석에 활용할 수 있는 로그를 식별할 수 있음
필드에서 소스타입을 클릭하면 상위 10개만 출력되기 떄문에, 중복을 제거 후! 전체 출력할 필요가 있음
=> index="test" | dedup sourcetype | table sourcetype
(dedup: 중복제거, table: 출력)
2. 각각의 소스타입 별로 구성되는 필드를 확인해야함
index ="test" sourcetype ="apache_access" 특정 소스타입 필터 후 확인 해야함d
3. 필드별 연관성 분석
출발지 ip, 목적지 ip, port, useragent, ID, command, ... 등이 중요
4. 쿼리를 만들어야함 (위협데이터 식별)
index="test" sourcetype="apache_access" s_ip="1.1.1.1" d_ip="2.2.2.2" agent="curl*"
Splunk 분석 실습
실습 - bots.data
cd /opt/splunk/etc/apps
cp -r /home/kali/Desktop/botsv1_data_set ./
(가져오는 이유: 500mb 이상일 경우, 수동으로 넣어줘야 함)
시나리오 - 대기업 조직인 Wayne Enterprises 는 최근 사이버 공격에 직면하여 공격자가 네트워크에 침입하여 웹 서버에 접근하고 웹사이트 http://www.imreallynotbatman.com 을 성공적으로 손상시켰습니다 . 그들의 웹사이트는 이제 아래와 같이 귀하의 사이트 가 손상되었습니다.라는 메시지와 함께 공격자의 상표를 표시하고 있습니다.
그들은 " US "에 보안 분석가 로 합류하여 이 사이버 공격을 조사하고 네트워크 내에서 근본 원인과 모든 공격자의 활동을 찾는 데 도움을 줄 것을 요청했습니다.
좋은 점은 Splunk가 이미 설치되어 있어 공격자의 활동과 관련된 모든 이벤트 로그를 캡처했다는 것입니다. 우리는 기록을 탐색하고 공격이 어떻게 그들의 네트워크에 들어갔고 그들이 어떤 행동을 취했는지 찾아야 합니다.
소스타입 출력
사용해야 할 정보
stream:http - web 접속 로그 추정
sysmon - sysmon 로그
fgt_utm - 포티게이트 방화벽 로그
stream:dns - dns 쿼리 로그
stream:tcp - tcp 통신 로그 수집
stream:tcp suricata - IDS/IPS 탐지 로그
시나리오 문제
1. 하나의 suricata 경보는 공격 시도와 관련된 CVE 값을 강조 표시했습니다. CVE 값은?
Query 1) 필드 분석을 위한 전체 쿼리 출력 : index="botsv1" earliest=0 | dedup sourcetype | table sourcetype
Query 2) 필드 추가 - selected_fileds에 #alert_action, #alert_category 추가
Query 3) alert_category에서 Web application attack 선택
Query 4) index="botsv1" earliest=0 sourcetype="suricata" cve-* ==> alert_signature가 cve 번호를 포함하고 있음
Answer) 3개의 cve
2. 우리 웹 서버가 사용 하는 CMS(콘텐츠 관리 시스템) 는 무엇입니까 ?
-> URI에 같이 노출되므로 tcp or http확인이 필요함
Query 1) 필드 체크 -> tcp가 아닌 http 확인이 필요함을 확인
Query 2) http - request나 URI 분석이 필요!
Query 3) index="botsv1" earliest=0 sourcetype="stream:http" | dedup uri | table uri => uri 분석
ANS) joomla가 가장 많이 접속했음을 확인 -> 구글 검색후 CMS임을 확인
3. 공격자가 스캐닝 시도를 수행하는 데 사용한 웹 스캐너는 무엇입니까?
=> 포트 스캐너가 아니라, WEB 스캐너를 찾아야함
=> http에서 확인 가능, User_Agent 항목에 도구명이 기록됨
Query 1) index="botsv1" earliest=0 sourcetype="stream:http" => http_user_agent 필드 체크
=> 100건 미만은 정상으로 취급
Query 2) index="botsv1" earliest=0 sourcetype="stream:http" http_user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21"
data_content, data_header | src_content, src_content, src_headers 체크
ANS) Acunetix Vulnerability Scanner가 사용되었음을 확인
4. imreallynotbatman.com 서버의 IP 주소는 무엇입니까?
Query) index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com
==> http에 imreallynotbatman.com 키워드 추가 후 dest_ip 필드 확인
ANS) 여러개 있을 경우, 가장 많은 IP(192.168.250.70)가 해당됨
5. imreallynotbatman.com 에 대해 무차별 암호 대입 공격을 시도할 가능성이 있는 IP 주소는 무엇입니까 ?
1) 특정 주소에서 특정 아이디를 대상으로 비밀번호가 바뀌는 경우
2) 소스코드 기반으로 시도하는 경우 -> agent에 프로그래밍언어가 기록됨
=> python
Query 1) index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com login
==> 최소 못해도 100번 이상이 발생해야함
=> src_header(Request Header) && src_content(Request Body) 확인 필요
무차별 대입 암호
- 로그인은 POST 기반으로 동작하기 때문에, 사이트가 매우 취약하지 않는 한 보통 body 영역에 구조가 생성됨
POST/login http1.1 >> header
login=admin&password=1234$submit=submit > body
Query 2) login 이외의 다른 keyword도 시도 (path, pass 등등)
=> 출력 x, 무차별 대입 공격이 발생했음을 확인
ANS) 23.22.63.114
6. 무차별 대입 시도가 여러 번 발생한 URI 는 무엇입니까?
Query) src_ip 확인
23.22.63.114 (python)
Query) index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com acunetix
src_ip 확인
40.80.148.42
uri 필드 확인
ANS) joomla/administrator/index.html
7. 어떤 사용자 이름에 대해 무차별 대입 시도가 이루어졌습니까?
Query) index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com src_content="*user*"
Query 2) 중복제거
ANS) admin
8. imreallynotbatman.com 을 실행하는 콘텐츠 관리 시스템에 대한 관리자 액세스의 올바른 비밀번호는 무엇입니까 ?
==> python method X, web 기반에서 흔적을 찾아야 함!
POST Method, username = admin
Query) index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com src_content="*user*" POST http_user_agent="Mo*" | dedup http_user_agent | table src_content, _time, src_ip, dest_ip
공격자 IP => src_ip, dest_ip
ANS)
9. 무차별 대입 시도에서 얼마나 많은 고유 암호가 시도되었습니까?
Query 1) 전체 공격 시도 조회 index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com src_content="*user*pass*" POST http_user_agent="py*"
Query 2) 올바른 패스워드 출력index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com src_content="*user*passwd=batman*" POST http_user_agent="py*"
ANS) 무차별 공격 시도 전체 Total = 412, Fail = 411
10. 올바른 비밀번호를 찾은 후 공격자가 관리자 패널에 로그인하는 데 사용한 IP는 무엇입니까?
Query) index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com src_content="*user*passwd=batman*" POST http_user_agent="Mo*" | dedup http_user_agent | table src_content, _time, src_ip, dest_ip
ANS) 40.80.148.42
11. Sysmon은 생성되는 프로세스의 Hash 값도 수집합니다. 프로그램 3791.exe의 MD5 HASH는 무엇입니까?
Sysmon - splunk에서 기본적으로 지원 X (plugIn 필요 - addon-sysmon) => Apps에서 추가 (Manage app > Install app> Upload)
Query) index="botsv1" earliest=0 | dedup sourcetype | table sourcetype => 소스타입 조회 후, sysmon 관련 로그 검색
Query 2) index="botsv1" earliest=0 sourcetype=xmlwineventlog
Query 3) index="botsv1" earliest=0 sourcetype=xmlwineventlog 3791.exe
=> 27만 개에서 69개로 줄어들은 events 결과를 볼 수 있음!
**Sysmon 기능**
- 현재 프로세스와 상위 프로세스 모두에 대한 전체 명령줄을 사용하여, 프로세스 생성을 기록
- 원본 프로세스, IP주소, 포트번호, 호스트 이름 및 포트 이름을 포함하여 네트워크 연결을 기록
- 정상 프로세스도 기록이 같이 됨
- sysmon 로그에서 ParentCommandLine가 포함되어야 실제 실행되고 있는 것임!
Query 4) index="botsv1" earliest=0 sourcetype=xmlwineventlog "ParentCommandLine'>3791.exe" 실제 실행되고 있는 (2개의) 프로세스로 압축됨
SHA1=F5CFD4070EA7D2B40A29F21F9E29AF23341C59EC
5) virustotal.com에 해시값 넣어봄 => search F5CFD4070EA7D2B40A29F21F9E29AF23341C59EC
==> Cmd 값, 잘못 찾음!
Query 6) index="botsv1" earliest=0 sourcetype=xmlwineventlog "3791.exe" "ParentCommandLine"
ANS) MD5=59A1D4FACD7B333F76C4142CD42D3ABA
12. 바이러스 토탈에서 해시를 검색하십시오. 이 파일 3791.exe와 관련된 다른 이름은 무엇입니까?
Names - 현재 보고된 악성코드들
ANS) ab.exe, ec...
13. imreallynotbatman.com 웹사이트를 훼손한 파일의 이름은 무엇입니까?
웹사이트 훼손 = 악성 파일이 업로드 되었다 or import(Link) 되었다
(1) 업로드: POST, BoardName upload ==> 공격자가 권한이 없을떄의 업로드 방식
(2) 관리자 권한이 있을 때, 기존 업로드 파일 바꿔치기 방식이 존재
Query1 ) index="botsv1" earliest=0 sourcetype="stream:http" POST upload
>> 34 events
Query 2) index="botsv1" earliest=0 sourcetype="stream:http" POST upload 40.80.148.42
==> 공격자 IP를 넣어도, 34 events로 동일 = 업로드 관련 공격은 모두 공격자가 수행했음을 알 수 있음
Query 3) DNS 질의를 통해 악성 도메인 여부를 확인
1) index="botsv1" earliest=0 sourcetype="stream:dns" 40.80.148.42 >> 0 event
2) index="botsv1" earliest=0 sourcetype="stream:dns" 23.22.63.113 >> 1 event
Query 3) index="botsv1" earliest=0 sourcetype="stream:http" prankglassinebracket.jumpingcrab.com
Exif: 사진 파일을 있음을 알 수 있음 => 악성파일이 있는 파일을 link 걸어 놓음 .jpg
ANS)
14. Fortigate Firewall 'fortigate_utm'이 공격자의 IP 40.80.148.42에서 SQL 시도를 감지했습니다. SQL 주입 시도 중에 트리거된 규칙의 이름은 무엇입니까?
Query) index="botsv1" earliest=0 sourcetype="fgt_utm" 40.80.148.42 SQL
ANS)
15. 이 공격은 동적 DNS를 사용하여 악성 IP를 확인합니다. 이 공격과 관련된 FQDN(정규화된 도메인 이름)은 무엇입니까?
Query) index="botsv1" earliest=0 sourcetype="stream:dns" 23.22.63.114
ANS) 13번에서 찾은 주소 => prankglassinebracket.jumpingcrab.com
security onion
: 트래픽 분석 및 로그분석을 위한 플래폼 (pcap)
=> Blue Team(SoC) Security Onion, SIFT WorkStation
ELK , Sguil, Snort, Suricata ...
RedTeam : kali
security onion 관련 정리된 github
https://github.com/Muneer44/Security-Onion-Traffic-Analysis
Access Security Onion via SSH
ssh <security-onion-username>@<security-onion-ip>
Create Firewall Rule in Security Onion
Download and Import PCAP for Malware Traffic Analysis
- wget <Malware-Traffic-PCAP-Link_address>
- unzip <PCAP-filename> #You can use 'ls' command to list the files
- sudo so-import-pcap <PCAP-filename>
SIEM
- 위협캄지, 응답 시간, 조사
- 로그간의 체인
룰 만들고 테스트 해볼 때, 활용 할 수 있는 웹 사이트
https://malware-traffic-analysis.net/index.html
Suricata - 멀티에 최적
Zeek - 악성 트래픽 분석 도구
admin@admin.kr
password
security onion 명령어는 다 so로 시작함
패킷 분석 관련 docs
https://docs.securityonion.net/en/2.4/pcap.html
sguil
+ sguil packet git
reference
https://github.com/Muneer44/Security-Onion-Traffic-Analysis
https://malware-traffic-analysis.net/index.html
온프레미스와 클라우드 환경의 보안 관제 실무 - 이별 강사님
'Cyber Security > [새싹+SK쉴더스] 생성형 AI 활용 클라우드&보안 전문가 과정' 카테고리의 다른 글
[새싹 성동 2기] 클라우드 보안 컨설팅 실무 - 클라우드 컴퓨팅의 특징과 기술요소 (2) | 2024.12.15 |
---|---|
[새싹 성동 2기] 클라우드 보안 컨설팅 실무 - 클라우드 서비스 보안인증 기준 <CSAP> (24.12.15 기준) (3) | 2024.12.15 |
[새싹 성동 2기] AWS환경에서의 보안 모니터링 - CloudWatch 구축실습 (0) | 2024.12.13 |
[새싹 성동 2기] 보안 관제 실무 (3) - 웹 취약점 공격과 대응 방법 | ModSecurity(WAF Tool) 설치 및 실습 (0) | 2024.12.12 |
[새싹 성동 2기] SK쉴더스 현장실습 & 중간 후기 및 다짐 (2) | 2024.12.08 |