처음 만나는 클라우드 보안

로그 분석 기초 & 분석 예시 본문

정보보안

로그 분석 기초 & 분석 예시

영민하게 2022. 5. 18. 17:46
반응형

이번 포스팅에선 리눅스 환경에서 활용되는 로그분석 기본개념에 대해 알아본다. 

 

로그분석은 왜 리눅스인가?

  • 다양한 무료 오픈소스
  • 파이프라인(|)을 통한 분석 툴 조합 용이
  • 쉘 스크립트를 활용한 자동화 분석 가능
  •  윈도우에선 불가한 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개 로그 확인

IP주소, 접속일자, 명령어 등의 위치를 파악한다

 

 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"["   => [이후로 문자열 삭제

CRON(예약작업)이 2만 9천번 넘게 사용되었다. 악의적으로 설정되었을 가능성이 높다.

 

 

 - 결과값 저장

$ 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개의 로그 데이터를 분석한다

6컬럼 (GET, POST 명령어) / 11번 (요청 페이지)

2) 명령어 파악

 

$ cat dv_access.log | awk '$6~/"POST/{print $11}'|sort|uniq -c|sort -rn

//GET보다 중요한 POST명령어를 선별하여 IP와 접근 주소를 확인한다.

 


참고자료

https://www.nextree.co.kr/p4327/

 

정규표현식(Regular Expression)을 소개합니다.

날이 갈수록 개인정보 보호에 관련하여 보안정책을 점진적으로 강화하고 있습니다. 이에 따라 Web에서 회원가입 시 Password 설정을 복잡해진 보안정책에 맞추다 보니 복잡하게 조합해야만 정상적

www.nextree.co.kr

 

반응형
Comments