2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

로그 분석

2022. 9. 22. 21:27ㆍSK Rookies 9/Network System Secure

리눅스 환경에서의 로그 분석 장점

  • 많은 오픈 소스 활용
  • 로그 분석에 필요한 CLI(Command-Line Interface : 터미널을 통해 컴퓨터와 상호작용) 환경
  • 파이프라인(한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조 "|")을 통한 분석 툴의 유기적 조합 가능
  • 쉘 스크립트를 통한 자동화된 분석 가능
  • 대용량 로그 분석 가능
  • 다수의 파일에 반복적 작업이 가능

기본 명령어

  • cat file : file을 전부 보여줌
  • head -줄개수 file : 맨 위에서 부터 줄개수만큼 보여짐 -> 오래된 로그
  • tail -줄개수 file : 맨 아래에서 부터 줄개수만큼 보여짐 -> 최근 로그
  • grep [옵션][패턴][파일명] : 패턴(정규식)에 맞는 것을 찾아줌
    • 처음이 127.0.0.1 시작하지 않는 로그만 골라서 보려면 -> cat access.log | grep -v "127\.0\.0\.1"

grep 옵션 참고

  • sort : 정렬 
  • uniq -c : 중복제거 & -c : 중복된 개수 표시
  • 그외 ls, cd, mkdir, rm, rmdir, touch(파일생성), less ... 등

명령어 활용

  • 100번째 라인 보기 : cat 파일명 | head -100 | tail -1
  • 반복문 : for ~ do ~ done, cat 파일명 | while read 변수명

AWK (데이터 처리)

문자열 데이터 편집과 정규 표현식을 주로 사용하는 언어로 Sed 등과 결합하면 간결하면서도 강력한 스크립트가 가능하다.

  • 한 줄을 기준으로 띄워쓰기마다 $1 부터 차례대로 매칭이 가능하다
    • ex) my computer is very fast의 경우 $1 = my, $2 = computer ....인 식이다.
  • 조건 넣기 : cat test | awk '$1=="abc" {print $0}' -> 첫번째 단어가 "abc"인 줄 출력
  • -F"문자" -> 문자가 매칭된 순간부터 그 이후를 생략한다.

Sed : 치환할 때 사용

sed 's/old/new/g' : old를 new로 치환

.sample로 끝나는 텍스트 제거하려면 -> sed 's/\.sample//g' -> 비워놓는게 핵심, .의 경우 Escape처리하기

BPF (Berkeley Packet Filter) (아거스 사용시 사용)

사람이 사용하는 언어와 매우 유사 (영어권 국가의 모국어가 영어이면 따로 배우지 않아도 정도)

실습

어느 페이지 접근이 많았는지 찾기

우선 아파치 로그에서 access.log파일 하나를 복사해서 압축을 푼다.

파일 복사 및 압축 풀기

cat으로 할 경우 매우 많은 양의 로그가 나오고 또한 불필요한 정보까지 나온다 -> 알고싶은 내용은 페이지 url이므로 띄어쓰기를 기준으로 11번째를 보면 url을 볼 수 있다.

앞부분만 캡쳐한 모습

11번째만을 프린트하고 중복은 제거하고 개수를 세어 빈도수를 보기좋게 출력할 수 있었다.

11번째 문자열 중복 제거 및 개수 세기 및 내림차순 정렬 및 앞 20개 프린트하기

트와이스 맴버들을 알파벳 순서로 정렬하기

for문을 이용하여 파일로 만들고 그 파일에다가 sort를 적용한다.

파일로 옮김 (> : 없으면 파일을 만들고, 있으면 덮어쓰기)
정렬이 된 모습

데몬 출력 -> 중복제거, 내림차순 -> -F로 [ ] 제거

원본의 모습 일부분

우선 5번째가 원하는 데몬이다. 하지만 데몬에 [숫자]로 같은 데몬도 구분이 되어 있어, 이를 제거하여 순수 데몬만을 출력하고자 한다. 파이프라인 특성을 이용하여 5번째를 먼저 프린트하고 그 결과에서 "[" 이후를 생략한다. 여기서 $1인 이유는 이전에 $5로 한 문자열만 가지고 왔으므로 띄어쓰기가 없기 때문이다. 그 후 정렬 중복제거 내림차순 순으로 입력하면 아래와 같은 결과가 나온다.

수행 결과

Argus IDS Client 설치

확장자가 .arg라고 되어 있는 파일 -> Argus에서 생성된 로그이다.

.arg는 바이너리로 되어 있다 -> 용량을 줄이기 위해 -> 보기위해서는 도구가 필요함

기본 명령어

  • ra  -nzr  [파일명] (n : number(숫자),  z : 상세,  r : read file)
  • -s (옵션)

주로 사용되는 필드

  • 활용 예시
    • 출발지IP, 출발지Port, 목적지IP, 목적지Port만 골라서 추출 (출발지 IP/Port, 목적지 IP/Port)
      • ra -nzr 1_merged_total.arg -s saddr, sport, daddr, dport
    • ra -nzr 파일명 - "src host 192.168.1.122 and udp“ (bpf : awk대신 사용하는 필터 도구)

필드

설치과정

$ tar zxvf argus-clients-3.0.8.tar.gz

$ cd argus-clients-3.0.8/

$ sudo  apt  update

$ sudo  apt  install  gcc                          // gcc 컴파일을 하기 위한 도구 (소스코드를 컴파일 가능)

$ sudo  apt  install  flex  bison  byacc

$ ./configure

$ sudo  apt  install  make

$ sudo  make  &&  make install

$ sudo  su                                      // 같은 디렉토리에서 root권한으로 전환됨

    (PW : ubuntu )

# ./configure

# make && make install

# ra  --help                                    // 도움말이 나오면 성공적으로 설치됨

설치후 파일 열어보기

로그를 분석하여 악성코드에 감염된 컴퓨터가 있는지 찾아보기

실습에 앞서 arg파일 분석에 필요한 기본 지식 알기

 

DNS(Domain Name System)

  • 도메인이름에 해당하는 IPv4주소를 알려주는 것 : 정방향 조회 (A)
  • 도메인이름에 해당하는 IPv6주소를 알려주는 것 : 정방향 조회 (AAAA 또는 A6)
  • IP주소에 해당하는 도메인이름을 알려주는 것 : 역방향 조회 (PTR : pointer)
  • Query : Web Browser가 DNS에게 도메인이름에 해당하는 IPv4/IPv6를 물어보는 것
  • Response : DNS가 Web Browser에게 IPv4/IPv6를 알려주는 것  (악성코드가 C&C의 URL을 DNS에게 물어볼 것임)
  • DNS 로그의 특징 : 구분자로 [**]을 사용

2_dns.log 분석

1. 데이터 분석

우선 cat으로 전체를 읽어본 결과 매우 많은 양의 로그가 있었고 DNS로그 특징처럼 [**]가 구분자로 있었다. 여기서 중요한 정보는 Response(응답)으로 받은 도메인네임(5번째)과 IP주소(9번째)가 있다. -> 나중에 IP와 도메인을 매칭시켜 찾을 거기 때문 

dns.log 일부분

매칭 시킨 정보를 dns_lookup파일로 만들어서 저장을한다.

도메인과 IP를 추출해서 dns_lookup 파일로 만들기

2. 출발지가 192.168.1.0/24이고 외부의 웹서비스(443 or 80) 접속한 로그만 골라서 web.log 파일로 저장하시오.

우선 최근 20로그를 조회하여 데이터의 형식을 보면, 서비스와 출발 IP, 도착 IP 형식인 것을 알 수 있다.

최근 20로그

출발 IP를 조회해보면 192.168.1.x가 가장 많은 것을 알 수 있었다.

출발 IP 일부분

이를 토대로 192.168.1.x로 출발한 것 중에 HTTP, HTTPS 통신을 한 것들에 대해 출발,도착IP 및 도착 Port를 weblog에 저장한다

저장

3. TCP 포트로 출발하는 IP통계 구하기

4. TCP를 사용하는 경우 상위 10개의 목적지 IP통계 구하기

5. 업로드가 많은 상위 10개의 TCP를 사용한 출발지 IP 통계 구하기

6. TCP 포트로 출발하는 IP통계 구하기 - 출발, 목적지 IP, 목적지 Port 구하기

구하여 tcp_connection에 저장

7. tcp_connection에서 목적지가 사설 IP를 제외한 상위 30개 추출하기

사설 IP는 192.168.x.x, 172.16.x.x, 10.x.x.x 이다. *$1은 통계를 저장한 것으로 개수를 의미한다.

top30으로 저장

8. TOP30에 있는 목적지 주소를 dns_lookup과 매칭시켜 URL알아내기

dip라는 변수에 dns_lookup의 목적지 IP($3)을 대입하고, domain 변수에 도착지 IP와 같은 도메인 주소를 넣어 top30라인과 도메인을 다시 출력하여 넣는 모습이다.

매칭 결과

9. 회사 내부에 또 다른 사용자가 blinq.in에 방문했는지 조사하기

sort -u 는 uniq -c와 비슷하지만 카운팅을 하지 않는다.

조사 결과 71, 72가 접속 한 것을 알 수 있다.

악성코드에 걸린 컴퓨터 IP

'SK Rookies 9 > Network System Secure' 카테고리의 다른 글

Metasploit 실습  (0) 2022.09.21
Exploit  (0) 2022.09.20
암호화  (0) 2022.09.19
WireShark  (0) 2022.09.18
9월 15일  (0) 2022.09.16