ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PCRE, awk, Shell Script, Log Check - 정규 표현식, awk, 쉘 스크립트, 로그 확인
    Security 2022. 5. 18. 13:21

    Log

    Note

    PCRE (정규 표현식, Peal Compatible Regular Expression)

    문자를 그대로 기술하지 않으면서 문자들의 순열이나 패턴을 기술

    한 정규 표현식이 다른 스타일의 정규 표현 시기에 다르게 동작할 수 있음

    파일 검색 시 사용되는 와일드카드 문자와 정규 표현식에서의 문자는 다른 의미

     

    : 패턴을 저장, 추출, 검색 등을 할 때 사용

    ex) IP Address, 전화번호, 주민등록번호, E-Mail 등

     

    DLP (Data Loss Prevention) : 개인정보가 외부로 유출되지 않도록 하는 SW, 자체 PC를 검색하기도 함(패턴으로 검색)

     

    CERT (침해 사고 대응팀) : 사내 존재, 보안 업체 전문 인력으로 구성 ex) Ahnlab A-Team

     

    특수문자 호칭

     ^ : 캐럿 (Carrot)

     ~ : 틸드 (Tilde)

     *  : 아스테리스크 (Asterisk)

    [ ] : 브라켓 (Bracket)

     .   : 닷 (Dot), 포인트 (Point)

    @ : 앳 (At)

     

    [0~9] : 숫자만 사용 가능

    {3} : 3자리 사용 가능

    {1,3} : 1자리 ~ 3자리 사용 가능

    ex) [0-9]{1,3} : 0 ~ 999

           A{3} : A를 세 자리로 만듦 AAA

          [a-z] : a부터 z까지

          [a-z]{3} : a부터 z까지 3번 사용 : aaa,aab,aac, ... abc ... zzz

          [a-z]{1,3} : a부터 z까지 1~3번 사용 : a, b, c, d, ... aa, ab, ... aaa, aab, aac, ... zzz

          [^a-z] : 소문자가 아닌 것

          [^'] : '가 아닌 것

           i..o : info(가능) into(가능), . 는 문자 1개를 의미하는 와일드카드

     

    특수문자의 Escape 처리를 해주어야 함

    Escape : 특수 문자가 고유한 기능을 못하게 하는 것

    특수 문자 앞에 \를 붙이는 것

     

    awk

    : 문자열 데이터 편집과 정규 표현식을 주로 사용하는 언어

    - Sed 등과 결합하면 간결하면서도 강력한 스크립트 가능

    - 파일로부터 Record를 선택하고, 선택된 Record에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램

    - awk 명령의 입력으로 지정된 파일로부터 데이터를 분류한 다음, 분류된 텍스트 데이터를 바탕으로 패턴 매칭 여부를 검사하거나 데이터 조작 및 연산 등의 액션을 수행하고, 그 결과를 출력하는 기능

    - 기본적으로 입력 데이터를 라인(Line) 단위의 레코드(Record)로 인식

    - 각 Record에 들어있는 Text는 공백 문자(Space, tab)로 구분된 Field들로 분류

     

    Shell Script

     

    반복문

    for i in 1 2 3 4 5 6 7 8 9
    > do
    > echo $1
    > done

    akw

    echo "kmk lhr gd" | awk '{print $2,$3,$1}'#kmk = $1, lhr = $2, gd = $3으로 표시값으로 출력
    echo "kmk lhr gd" | awk '{print $3,$1}'#위와 마찬가지로 $3과 $1이 출력
    echo "kmk lhr gd" | awk '{print $3,$1}' | awk '{$2, $1}'
    #첫 번째 awk의 첫 번째를 $1, 두 번째를 $2로 다시 매겨진 순서로 번호를 매겨 출력합니다.

     

    sed : 치환할 때 많이 사용하는 명령

    $sed 's/old/new/g' // old가 new로 바뀜

     

    cf. DNS Log는 구분자를 [**]로 사용함 - awk문은 공백을 구분자로 사용하기 때문에 DNS Log를 읽을 수 없음

    sed 's///g'                 // 공식

    sed 's/[**]/|/g'            // 바꿀 내용 입력

    sed 's/\[\*\*\]\/|/g' // 이스케이프 처리를 위해 \를 붙임

     

    Log 확인 실습

    ls#Downloads에 다운로드한 파일들 확인
    sudo apt install p7zip p7zip-full#압축 풀기

    tail -10 bee_access.log#bee_access.log의 끝에서 10번째의 Column만 확인

    sudo cat bee_access.log | awk '{print $6,$7}'#6,7 Column만 확인

    sudo cat bee_access.log | awk '{print $6,$7,8}'#무슨 행위가 있었는지 보기 위해 6~8번까지 확인

    sudo cat bee_access.log | awk '{print $6,$7,8}' | sort -rn#192.168.5.1에서 몇 번이나 접속했는지 확인

    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#마지막 공격을 끝낸 시간

     

    Log 확인 실습 2

    sudo 7zr x log.7z

    ls
    ls -l#-l은 리스트의 더 많은 정보를 의미

    tail -10 auth.log

    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'#3번 이상만 골라서 확인(1 ~ 2번 나온 것은 의미가 없다고 생각하고 출력)

    cat auth.log | awk '{print $10}' | sort | uniq -c | sort -rn | awk '$1>$2' > my.log # > 는 저장을 뜻하며 my.log로 저장
    less my.log#읽기

    그대로 읽어집니다.

    cat auth.log | awk '{print $5}' | awk -F"[" '{print $1}' | sort | uniq -c | sort -rn
    #-F"[" Bracket 제거, 정렬, 중복제거, 내림차순 순으로 어떤 명령어가 많이 반복되었는지 확인

    sshd가 70442로 비정상적으로 많이 사용되었음을 알 수 있습니다.

    Log 확인 실습 3

    head -20 dv_access.log#dv_access.log의 위에서 20개의 Log 조회

    cat dv_access.log | awk '$6~/"POST/{print $11}' | sort | uniq -c | sort -rn
    #어떤 페이지를 POST로 확인했는지 조회
    #6번 Column은 POST 또는 GET으로 시작하므로 POST만 골라서 보고, 11번 Column은 요청한 페이지이므로 이렇게 작성

     

    댓글

Designed by Tistory.