일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- AWS SAA
- metasploit
- 인스턴스
- EC2
- 클라우드
- 파일시그니처
- 취약점
- 클라우드서비스
- azure
- 클라우드자격증
- Iam
- 보안컨설팅
- 네이버클라우드
- 클라우드 자격증
- Burp Suite
- RDS
- 로드밸런서
- 클라우드보안
- 공개키
- 정보보호
- isms
- 정보보안
- 와이어샤크
- AWS SSA
- 로그분석
- mysql
- AWS
- ncp
- ISMS-P
- 개인정보보호법
- Today
- Total
처음 만나는 클라우드 보안
로그 분석 기초 & 분석 예시 본문
이번 포스팅에선 리눅스 환경에서 활용되는 로그분석 기본개념에 대해 알아본다.
로그분석은 왜 리눅스인가?
- 다양한 무료 오픈소스
- 파이프라인(|)을 통한 분석 툴 조합 용이
- 쉘 스크립트를 활용한 자동화 분석 가능
- 윈도우에선 불가한 10G 이상의 대용량 로그도 분석 가능
1. 정규표현식
정규식은 특정 규칙을 가진 문자열의 패턴을 표시하는 언어를 뜻한다. 정규표현식 중에선 PCRE (Perl Compatible Regular Expression) 펄 호환 정규표현식이 대표적이며, 다른 표현식과 표현이 거의 비슷하다. 주로 문자열의 검색과 치환을 지원하기 위해 사용된다. -Wikipedia
- 메타문자
정규 표현식에서 사용하는 기호
메타문자 [이름] | 설명 | 예시 |
^ [캐럿] | 문자열의 시작 | '^abc' : abc로 시작하는 패턴 |
$ [달러] | 문자열의 종료 | 'abc$' : abc로 끝나는 패턴 |
. | 임의의 한 문자 ( \를 제외한 모든 문자) | i..o : info(가능), into(가능) .는 어떤 문자든 1개를 의미하는 와일드 카드이다. |
* [아스테리스크] | 앞 문자가 0번 이상 있음 | A* = " ", "A", "AAAAA", "AB" |
+ | 앞 문자가 1번 이상 있음 | |
? | 앞 문자가 없거나 하나 있음 | |
[ ] [브라킷] | 문자의 집합 범위, 문자 사이는 - 기로호 나타낸다. 이 안의 ^ 는 NOT을 의미한다. | '[a-zA-Z0-9]' : 영문, 대소문자 및 숫자를 의미 '[^0-9]' : 숫자가 아닌 문자 패턴 |
{ } | 횟수 또는 범위를 나타낸다. | [a-z]{3}: a부터 z까지 3번 사용 : aaa,aab,aac...,abc,kjh,....,zzz ---> 알파벳 소문자 3자리 [a-z]{1,3} : a부터 z까지 1~3번 사용 : a,b,c,d,....,aa,ab,ac...,aaa,aab,aac,...,zzz |
() | 소괄호 안의 문자는 하나의 문자로 인식 | |
| [파이프] | 패턴에서 or 연산, 분석 툴 조합에 활용 | |
\ | 다음 특수문자의 고유기능 방지 (escape) | cat access.log | grep -v "^127\.0\.0\.1" :처음이 자기자신(127.0.0.1)로 시작하지 않는 로그 고르기 |
\t | tab을 표현한다 | awk '{print $1 "\t" $2 "\t" $ "\t" $3}' |
작성 참조 - https://tristan91.tistory.com/463
- awk문
정규표현식을 사용하여 파일 속 문자열을 분류한 다음 패턴 매칭 여부 기능을 수행하는 프로그램
: 기본적으로 파일 속 데이터를 라인(Line) 단위의 레코드(Row, 행)로 읽는다.
: 각 레코드에 들어있는 텍스트는 공백 문자(space, tab)로 구분된 필드(Column, 열)로 구분한다.
사용 예시 => awk [option] 'script' [var=value] [files]
참고) -F => []을 지울 수 있다.
- awk 주요 명령어
sort
awk '{ print $1}' log.txt | sort // 출력 값의 오름차순 정렬
awk '{ print $1}' log.txt | sort -r //출력 값의 내림차순 정렬
uniq -c
sort -u : 중복 제거
uniq -c : 중복 제거, 왼편에 개수를 표시
※주의
uniq는 인접한 '위아래'데이터가 같은 경우 중복으로 본다. 따라서 로그를 정렬(sort) 뒤 중복 처리해야 한다.
=> 항상 sort뒤에 사용
- sed명령어
: 공백을 포함한 문자열을 치환 기능을 가진 명령어, awk문과 조합하여 사용된다.
사용 예시 => $ sed 's/old/new/g' // old가 new로 바뀜
ex) DNS로그는 awk문에서 읽지 못하는 구분자 [**]를 사용한다.
예시) [**]를 | (파이프)로 치환
1단계 sed 's//g' // 공식
2단계 sed 's/[**]/|/g' // 바꿀 내용 입력
3단계 sed 's/\[\*\*\]/|/g' // escape처리를 위한 \추가
2. 로그 분석 예시
예시 로그파일 => bee_access.log
1) 로그 포맷 확인
tail -10 bee_access.log
// 분석 대상 로그파일에 대한 최근 10개 로그 확인
2) 행위 파악
$ sudo cat bee_access.log | awk '{print $6,$7,$8}' | uniq -c
// awk문으로 특정 칼럼을 선정, uniq -c로 중복을 제거하고 개수를 표시한다.
참고)
uniq -c : 중복 제거하고, 왼편에 개수를 표시
sort -u : 중복만 제거
3) 특정 IP의 입력 횟수 파악
$ cat bee_access.log | awk '{print $1}' | uniq -c | grep 192.168.5.1
// 첫 번째 칼럼(IP주소), uniq 중복제거, 특정 IP에 대한 접속 횟수 확인
4) 공격 시작 시간, 종료 시간 추출
$ cat bee_access.log | grep '192.168.5.1' | awk '{print $1, $4, $5}' | head -1
$ cat bee_access.log | grep '192.168.5.1' | awk '{print $1, $4, $5}' | tail -1
// 특정 IP에 대한 awk문 칼럼 추출, 최초 공격시간(위), 최종 공격시간(아래)
참고) 아래 시간은 GMT +2
3. 실제 로그 데이터 분석 (1)
실제 로그파일 => auth.log
분석 로그 7zip 파일 압축 풀기
$ sudo apt install p7zip p7zip-full
$ sudo 7zr x log.7z
1) 로그 포맷 확인
$ sudo cat auth.log | tail -10
2) 실행이 이뤄진 사용자 확인
$ cat auth.log | awk '{print $10}' | sort | uniq -c | sort -rn
- 결과값 저장
$ cat auth.log | awk '{print $10}' | sort | uniq -c | sort -rn | awk '$1>2' > my.log
// 개수가 2 이상인 값에 대해 my.log로 저장한다.
3) 명령어 파악
$ cat auth.log | awk '{print $5}' | awk -F"[" '{print $1}' | sort | uniq -c | sort -rn
// -F"[" => [이후로 문자열 삭제
- 결과값 저장
$ cat auth.log | awk '{print $10}' | sort | uniq -c | sort -rn | awk '$1>2' > my.log
4. 실제 로그 데이터 분석 (2)
실제 로그파일 => access.log (DVWA)
1) 로그 포맷 확인
$ head -20 dv_access.log
//상위 20개의 로그 데이터를 분석한다
2) 명령어 파악
$ cat dv_access.log | awk '$6~/"POST/{print $11}'|sort|uniq -c|sort -rn
//GET보다 중요한 POST명령어를 선별하여 IP와 접근 주소를 확인한다.
참고자료
https://www.nextree.co.kr/p4327/
'정보보안' 카테고리의 다른 글
HTML 기초태그: 간단한 홈페이지 만들기 (0) | 2022.05.25 |
---|---|
Argus로그를 이용한 침해사고분석 (0) | 2022.05.18 |
보안 위협 탐지를 위한 로그분석 (0) | 2022.05.17 |
메두사(Medusa)를 활용한 Dictionary 공격 (0) | 2022.05.17 |
사전 공격(Dictionary Attack) 실습 (6) | 2022.05.17 |