포스팅을 시작하기전에 사용한 툴은 다음과 같다.


  1. 파이썬2

  2. XAMPP (Maria DB)

  3. HeidiSQL (DB GUI)



1. 개요



해당 포스팅에는 시나리오가 있다. 악성코드 분석 중 대용량의 자료유출 흔적이 발견되어 대용량의 방화벽 로그를 확보하였다. 해당 로그를 보고 자료유출 흔적을 찾고 공격자의 위치를 찾아내는 것이다.




2. 분석



직접 수집한 데이터가 아니기 때문에 데이터에 대한 많은 정보를 공개할 수는 없다.



▶ 초기 데이터 분석

초기 데이터는 113GB의 텍스트 파일이다.

내부 내용은 [날짜 및 시간], [ID], [severity], [sys], [sub], [name], [action], [fwrule], [src_mac], [dst_mac], [src_ip], [dst_ip], [length], [srcport], [dstport] 로 이루어져있다.  이 로그를 생으로 분석하기에는 불필요한 정보가 너무 많다. 필요 / 불필요를 나누는 기준은 위의 개요에서 언급했듯 목적에 맞춰서 기준을 선정할 것이다.


데이터는 [날짜 및 시간], [src_mac], [dst_mac], [src_ip], [dst_ip], [length], [srcport], [dstport] 를 파싱하여 최적화할 것이다. 우리의 목적은 DB에도 연동하는 것이기 때문에 각 필드 값 또한 최적화를 수행해야 한다.




▶파싱 소스 작성

파싱을 위한 파이썬 소스는 Git에 올려둔 링크로 대신하겠다.
https://github.com/swpose/sw_python2/blob/master/firewall_git.py

코딩 실력이 많이 부족하여 속도는 고려하지 않고 작성하였다. 이후 추가적인 최적화를 위해 수정해보도록 하겠다.



3. DB 연동



DB 연동은 XAMPP를 이용하여 서버를 생성하였다.

해당 도구는 우리가 흔히 사용하는 서버를 쉽게 사용할 수 있도록 해준다. 나는 MySQL을 사용하였다.




HeidiSQL 도구는 데이터를 조회할 때 쿼리가 아닌 GUI로 편리하게 볼 수 있도록 해주는 도구이다. DB를 많이 다뤄보지 않은 사람이나 초심자들이 사용하면서 감을 잡기에는 좋을 것 같다.



위의 두개의 도구는 일반 설치함에 있어서도 별도의 어려움이 존재하지 않기에 설치방안에 대해서는 언급하지 않겠다.

위의 두개의 도구를 활용하면 간단한 쿼리문만으로도 DB를 조회할 수 있다.
우리가 원하는 데이터는 대량유출에 대한 증거를 찾는 것이다.
결과부터 말하면 위의 length의 역순으로 정렬하여 큰 용량을 찾으면 될 것이다. 이를 위해 사용한 쿼리문은 다음과 같다.


DBname = f_log / Table name = firewall 

  1. mysql –uroot;
  2. use f_log;
  3. LOAD DATA LOCAL INFILE "C:/log_output.csv" INTO TABLE f_log.firewall FIELDS TERMINATED BY ",";
  4. select count(*) from firewall;
  5. select * from firewall order by ID desc limit 50;



데이터 연동 중 데이터를 조회하였다. 대충 저런식으로 DB에 연동된다.

4. 결론



초대량의 데이터에서 원하는 정보를 파싱하여 DB에 연동함으로써 원하는 정보를 빠르고 정확하게 찾을 수 있고 침해 사고의 대응하는데 도움이 될 수 있을 것이라는 생각을 하였다.



'개발 > Python' 카테고리의 다른 글

zlib Decompress issue  (0) 2019.02.12
BeautifulSoup vs Scrapy  (0) 2019.01.06
크롤링(Crawling)이란? 또는 파싱(Parsing)이란? 스크래핑이란?  (0) 2019.01.06

+ Recent posts