본문 바로가기

교육 및 자격증/빅데이터 기반 보안로그분석[splunk]

웹 해킹 로그 분석(sql, 파일 다운로드/업로드 ..)

728x90

SQL 인젝션 공격

 - 문자열 검색으로 쿼리 삽입여부 검사

 

검색스트링

 - ' or * 또는 '' or *

 - ' and * 또는 '' and *

 - information_schema*

 - Sysobject 또는 syscolumns

 - DBA_OBJECTS
 - Union select

 - NULL, null

 - Having 1=1*

 - 500에러 코드 : sql 인젝션 공격 특성 상 500에러 다수 발생

status = 500

index = "webhack" union select
 => union select 구문 검색

 

파일 업로드 공격

 - 업로드된 공격은 공격자에 의해 호출됨

 - 일반 사용자보다 호출빈도가 적기 때문에 빈도수가 적은 페이지는 공격 스크립트로 공격 스크립트 가능성 의심

index = "webhack" status=200 file=*.php | stats count, values(uri) by file | sort count
=> php 파일 검색

 

파일 다운로드 공격

 - ../ 같은 상위 디렉토리에 대한 접근탐지

 - etc/passwd 등 주요 시스템 파일에 접근 탐지

 

index = "webhack" ../../

 

불필요한 파일 스캔 탐지

 - 자동화된 스캔 프로그램 사용 시 다수 400* 에러 발생

 - 접속자 ip 별 에러 카운트를 통해 스캔 공격 탐지 가능

 - 숨겨진 파일 찾는 행위(backup, manager, admin, new 등..)

index = "webhack" status=4* | chart count by clientip

 

index = "webhack" status=4* | stats count by clientip | sort -count
 => 

18.~.211에서 10000건의 이상 행위 발견

이벤트 로그를 보면 웹 스캐닝 도구인 nikto를 확인

 

로그인 공격시도

 - 동일 ip에서 로그인 페이지에 접근량을 확인하기

 - 로그인 페이지 주소 확인

 - client ip 별 접근 건수 확인. over 옵션으로 확인 가능

brute force, 레인보우 테이블 등..

 

index = "webhack" file=login.php status=200 | stats count by clientip | sort - count

 

CTF 로그 실습

CTF_WEB.txt

source="CTF_WEB.txt" host="user" index="ctf" sourcetype="access_combined" | table *
=> 전체 테이블 조회해서 이상 탐지

 - referer필드에 base64로 인코딩된 부분이 많아서 splunk앱에서 디코딩해주는 앱 설치하기

splunkbase > cyberchef for splunk

index=ctf sourcetype=access_combined | cyberchef infield=referer outfield=result operation='Frombase64' | table result | search resul"* *" AND result != "sqlmap*"
=> cyberchef로 디코딩하는데 idfield는 입력 필드, outfield는 내보내는 필드로 result로 내보낸다
operation으로 디코딩을 수행하고 띄어쓰기가 있는 문자열 만 찾도록 * * 사용

=> sqlmap 흔적 발견 [리눅스 명령어로 실행권한을 실행]

 

웹 추가 실습(3개 공격 찾기)

final.txt accesslog 158,327개의 이벤트

source="access.log" host="192.168.0.100" index="final" sourcetype="access_combined" status=4* | stats count by clientip | sort -count
=> clientip 기준으로 count 확인

ip는 1개

source="access.log" host="192.168.0.100" index="final" sourcetype="access_combined" | stats count by status

=> status 개수 확인[404, 500 에러 개수 이상]

status 400번대 nikto 확인

시간대를 보면 주기적으로 공격함

[불필요한 파일존재 취약점 공격 확인]

useragent=*nikto* status=200 | table uri

uri가 index가 아닌 것을 찾아보니 db 접근 성공을 확인했고 공격이 성공한 것으로 판단.

다른 취약점 찾으려면 (useragent!="nikto" AND status!=4*)로 제외하고 검색

 

status 500번대 sqlmap 확인

로그 전체가 200번대 공격은 공격 실패

로그 전체가 500번대 공격은 모름(errorbased는 공격 성공, union base는 실패)

 

 

 

source="access.log" host="192.168.0.100" index="final" sourcetype="access_combined" useragent=sqlmap* | stats count, values(uri) by status
=> useragent가 sqlmap인 로그 찾기

sqlmap을 사용한 sql인젝션 공격 확인

SELECT%20%27qvpzq%27%7C%7C%28CASE%209810%20WHEN%209810%20THEN%201%20ELSE%200%20END%29%7C%7C%27qqkzq%27%20FROM%20RDB%24DATABAS -> select문

 

무차별 대입 공격

file=login_ok.php
 => python으로 무수히 많은 공격을 한 것으로 보임

file=login_ok.php | stats count by bytes
=> 로그인 성공과 실패의 바이트 차이를 확인

1건만 byte에 차이가 난다

회원가입, 로그인, 정보 수정, 정보 수정 확인, 로그인 확인으로 공격성공한 것으로 보인다