-
PCRE, awk, Shell Script, Log Check - 정규 표현식, awk, 쉘 스크립트, 로그 확인Security 2022. 5. 18. 13:21
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 제거, 정렬, 중복제거, 내림차순 순으로 어떤 명령어가 많이 반복되었는지 확인
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은 요청한 페이지이므로 이렇게 작성
'Security' 카테고리의 다른 글
Forensic - 포렌식 (2) 2022.05.19 Ubuntu - Argus-clients, Shell Script - 우분투 Argus-client, 쉘 스크립트 (0) 2022.05.18 Ubuntu - Web Server (GNU Board), Web Firewall (Modsecurity) (0) 2022.05.17 DVWA - CSRF, Burp Suite - Dictionary Attack, Kali Linux -Medusa, Crunch - Brute Force (0) 2022.05.17 Linux E325 : ATTENTION 해결하기 (0) 2022.05.17