2019년 12월 22일 일요일

Logstash input 플러그인 jdbc 버그?

강의 중에 있었던 일. 6.8.3 버전으로 mysql 연동을 진행하는데 jdbc 드라이버를 찾지 못한다. 이전 강의에서는 정상적으로 동작했는데? 일단 stackoverflow 형님들이 알려준대로 드라이버를 'logstash-core/lib/jars' 경로에 복사해서 해결.


2019년 12월 15일 일요일

파일명 일괄 변경

가끔 다수의 파일명을 일괄적으로 바꿔줘야 할 때가 있다.


2019년 12월 8일 일요일

Elasticsearch 7.5의 변화

일단 키바나 사이드바 고정 메뉴 또 사라짐 'Kibana > Visualize' 메뉴에 Lens라는 기능이 새로 추가됐다.


2019년 11월 26일 화요일

세 번째 탈고

세 번째 책 원고 완성. 주제는 이상징후 분석이다. 사실 작년부터 쓰고 싶다는 생각을 했는데 이상하게 시작을 못했다. 그런데 알고 보면 쉬운 이상징후 분석 - 3rd 포스팅 후 갑자기 이제 쓸 수 있겠다는 자신감이 생김.


2019년 11월 13일 수요일

불티

태연의 불티. 요즘 자주 듣는, (마셔본 적은 없지만) 레드불 같은 각성 음료를 마시면 이런 기분이지 않을까 싶은 노래.



2019년 11월 10일 일요일

Logstash 필터 useragent

웹 요청 트래픽에는 useragent라는 웹 요청을 시도할 때 사용된 도구에 대한 정보가 있다.


이걸 분석해보겠다고 예전엔 정규표현식으로 웹 로그의 useragent 문자열을 추출한 후, 유형과 운영체제 등을 일일이 분류하는 노가다를 했었는데(..)

2019년 10월 31일 목요일

보안을 하기 위한 준비

가끔 강의 중 받은 질문에 대해 즉답을 못하고 뒤늦게 블로그 포스트로 대신할 때가 있다. 엘라스틱 keystore 인증도 그렇게 쓰게 된 글.

그런데 keystore를 이용한 인증 체계는 사실 전부터 꽤 궁금한 주제이기도 했다. 공식 매뉴얼만 찾아봐도 그리 어렵지 않게 구현할 수 있는 내용을 왜 질문을 받고 나서야 찾아보게 됐을까?

현장에서 보안 장비의 보안성에 매달리는 경우를 자주 봐왔다. 엘라스틱을 예로 들면 노드 간 통신이나 접속 정보를 암호화하고, 감사 기록을 남기는 등등 장비 자체의 보안성을 확보하는 행위들.

2000년 초까지 원격 작업이 필요할 때는 묻지도 따지지도 않고 telnet을 이용했었는데, 어느 순간 통신 과정을 암호화해주는 ssh가 대세가 되었다. 그 결과는 뭘까? 시스템이나 네트워크 장비가 서비스나 트래픽 처리를 더 잘 하게 되었을까?

2019년 10월 29일 화요일

엘라스틱 keystore 인증

엘라스틱은 6.8과 7.1 버전부터 유료 라이센스를 구매하지 않고도 인증 등의 보안 기능을 사용할 수 있다. 다음은 인증 기능 활성화를 위한 설정. (7.4.1 버전)

elasticsearch.yml

2019년 10월 17일 목요일

키바나 Aggregation Size 옵션 특징

다음은 키바나로 그린 URL(확장자) 발생 분포표. 결과가 5개만 나오는 이유는 계산 그룹이나 범위를 결정하는 Buckets 메뉴의 Size 옵션값이 5이기 때문이다. Top5 데이터를 표시한 결과.


2019년 10월 13일 일요일

윈도우 Logstash 파이프라인

로그스태시는 실행 시 pipelines.yml에 지정된 데이터 파이프라인 설정을 읽어와서 데이터를 처리한다.


2019년 9월 28일 토요일

Logstash의 데이터 처리

로그스태시는 멀티 프로세싱을 지원한다. CPU 코어를 풀로 돌릴 수 있다는 얘기. 코어 개수를 정할 수도 있음. 이때 둘 이상의 코어를 사용하면 사소한(?) 문제가 발생한다.


2019년 9월 25일 수요일

윈도우 DNS 이벤트 3008

윈도우 8.1부터 DNS 조회 요청 및 응답 이벤트 로그를 기록한다.


2019년 9월 21일 토요일

레토릭

부제는 엄청 거창한데, 어디선가 들어본 내용이 많아서 임팩트는 크지 않았음. 음 그렇구나 하면서 가볍게 읽기 좋다.

레토릭은 수사학으로 해석된다. 수사학은 또 뭔가 싶어 찾아보니 보통 대중 연설, 설득의 기술쯤으로 많이 알려진, 아리스토텔레스가 완성한 학문이라고.

아레스토텔레스는 수사의 종류를 정치적, 사법적, 과시적 수사로 구분했고, 설득의 방법으로 에토스, 파토스, 로고스를 제시했다. (37페이지)

정치적, 사법적, 과시적 수사는 각각 대중의 행동 유도, 문제점 파악, 누군가에 대한 찬양(또는 비난)을 목적으로 하는 수사를 지칭하는데 뭐 그냥 그런 분류가 있다 생각하면 될 것 같고, 진짜 중요한 건

2019년 9월 8일 일요일

윈도우 보안 이벤트 설정

얼마 전 사용 중이던 윈도우10 업데이트(1903)를 했더니 그 전까지 잘 수집되던 보안 이벤트가 안 들어온다. 업데이트 과정에서 보안 이벤트 설정이 초기화된 모양. 관련 설정을 위한 'Windows 관리 도구 > 로컬 보안 정책' 메뉴.


2019년 8월 26일 월요일

엘라스틱 노드 에러(node.max_local_storage_nodes)

엘라스틱은 한 컴퓨터에서 둘 이상의 노드를 굴릴 수 있다. 이때 인덱스 저장 경로를 노드끼리 공유하려면 node.max_local_storage_nodes 옵션값을 2이상, 최소 노드 개수만큼 줘야함. 하지만 윈도우 기본 인덱스 저장 경로는 'elasticsearch\data\node'.


2019년 8월 25일 일요일

2019년 8월 18일 일요일

Logstash 필터 drop

drop 필터의 percentage 옵션이 잘 동작하지 않는다는 질문을 받았다. 다음은 테스트 설정.
input {
 file {
  path => "d:/test.log"
  start_position => "beginning"
  sincedb_path => "nul"
 }
}

filter {
 #if "test" in [message] { drop {} }
 #if [message] =~ "test" { drop {} }
 #if [message] !~ "string" { drop {} }

2019년 8월 15일 목요일

2019년 7월 28일 일요일

엑셀 Distinct Count 구하기

이리저리 조립과 해체를 반복하면서 데이터랑 친해지는 데 엑셀만한 게 없지. 그래서 웬만한 분석은 여전히 엑셀로 한다. 다음은 피벗 테이블을 이용한 시간 단위 사용자 접속 발생 추이. 시간당 최대 접속자는 9,000명을 넘는다. 이 수치로 알 수 있는 건 무엇일까?


2019년 7월 21일 일요일

VIM 꼼수의 발견 - 5th

읽기 모드에서 'yy'를 입력하면 커서가 위치한 줄 전체 복사.


2019년 7월 7일 일요일

Logstash 필터 ruby - 3rd

별도의 구분자 없이 오직 길이로만 구분되는 로그도 있다.
2011-04-1010:24:35192.254.192.21110.168.0.3
2011-04-1010:25:21192.184.27.17  10.168.0.3
2011-04-1010:26:11192.239.17.233 10.168.0.3
2011-04-1010:27:22192.222.1.43   10.168.0.3
2011-04-1010:27:23192.68.15.236  10.168.0.3
2011-04-1010:28:35192.67.222.136 10.168.0.3
2011-04-1010:31:11192.46.105.186 10.168.0.3
2011-04-1010:31:11192.46.148.31  10.168.0.3
2011-04-1010:31:14192.221.72.126 10.168.0.3
2011-04-1010:33:23192.56.214.97  10.168.0.3

2019년 7월 2일 화요일

Winlogbeat 권한 문제

다음은 application, system, security 이벤트 로그 연동을 위한 winlogbeat 설정.


2019년 6월 29일 토요일

Logstash 필터 성능 테스트 - 2nd

방화벽처럼 key-value 구조가 반복되는 로그의 필드 분류에는 kv 필터가 딱이다.
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 action = permit
sip = 1.1.1.1 dip = 2.2.2.2 sport = 100 dport = 200 attack = 10.10.10.10
sip = 1.1.1.1 dip = 2.2.2.2 attack = 10.10.10.10

문제는 kv 필터가 내부적으로 정규표현식을 사용한다는 것. 성능 저하가 발생할 수 있다는 얘기. 이때 dissect 필터가 대안이 될 수 있다.

2019년 6월 26일 수요일

엘라스틱 노드 에러(low disk watermark)

엘라스틱은 디스크 사용 현황을 모니터링 한다. 사용량이 85%를 넘어서면 경고 발생.

노드 하나면 복제본 할당 안 하는데?

2019년 6월 16일 일요일

어떻게 하는 게 상관분석일까요?

다음은 'failed password' 키워드 검색을 통한 원격 로그인 실패 발생 추이. 'failed password' 키워드와 로그인 실패 상태는 서로 정비례하는 양의 상관관계를 갖는다.


2019년 6월 2일 일요일

데이터 노가다 실수담 - 3rd

이번엔 응답코드별 접속 페이지 발생 추이. 그런데 200 응답코드 상태일 때 접속 페이지 유형이 너무 많다. 확장자 수준으로 범위를 좁혔는데도 301개?


2019년 5월 29일 수요일

후기에 대한 후기

뼈 때리는 후기 발견.
간단한 정규표현식 정도는 알고 있었지만, 항상 제대 이해하고 사용해보려고 책을 구매. 책이 배송되기 전까지는 책을 받기만 하면 제대로 공부해야지 생각하고 있었는데, 역시나 나의 게으름이 문제... 아직 끝까지 다 보지는 못했지만, 책 내용은 나름 괜찮은듯. vi를 메인 편집기로 오래동안 사용해 왔는데 몰랐던 명령도 좀 배웠고, 정규표현식 이해에도 도움이 되고 있다. 
약간 아쉬운 점은 책의 예제를 시험해보려면 직접 타이핑해서 예제를 만들어야 하는데, 특정 사이트에서 예제를 내려 받을 수 있었으면 공부하는데 훨씬 도움이 됐을듯. 그리고 저자가 블로그에 작성한 글을 그대로 책으로 엮은듯한 구성은 매우 많이 아쉽다.

2019년 5월 23일 목요일

beat 인덱스 템플릿 수정

다음은 엘라스틱 다이렉트 연동을 위한 winlogbeat 설정. (6.7.2 버전)


2019년 5월 20일 월요일

데이터 노가다 실수담 - 2nd

지난 주 어느 기업 교육 요청을 받은 후 강의 방식을 조금 바꿨다. 로그스태시 설정 시 grok 필터 비중을 줄이고, dissect 사용을 필수 포함하는 식. 정규표현식에 대한 부담을 조금이나마 줄여보자는 의도.

다음은 dissect 필터로 1차 필드 분류가 끝난 아파치 웹로그의 응답코드 발생 추이. 그런데 이상한 게 눈에 띈다.


2019년 5월 16일 목요일

다양한 metric의 필요성

얼마 전 특정 보안 제품 활용 교육 의뢰가 있었다. 엘라스틱 기반으로 개발했다는 설명을 듣고 어렵지 않겠다 싶어 수락. 그런데 제품을 살펴보니 데이터 집계 유형이 'Count' 밖에 없네?

엘라스틱의 다양한 메트릭 유형들

2019년 5월 12일 일요일

Elasticsearch 7.0의 변화

엘라스틱 7.0이 출시됐다. 성능이나 안정성은 당연히 좋아졌을테고, 당장 느낀 몇 가지 변화만 나열해보면,

1. 마스터 노드 설정 필수. (IP 셋팅 했을 때)


2019년 5월 1일 수요일

알고 보면 쉬운 이상징후 분석 - 3rd

다음은 변수 길이 급증 시점의 변수 내역. 'create table'로 시작하는 SQL문이 눈에 띈다.


2019년 4월 28일 일요일

수학의 아름다움

구글 및 텐센트에서 자연어 처리 및 검색 전문가로 일했던 우쥔의 2014년 저서. (살다 살다 내가 내 돈 주고 이런 책을 사보는 날이 오는구나)

중국 IT 스타는 앤드류 응밖에 몰랐는데, 중국의 IT 파워를 새삼 느끼게 해준 책. 그래봐야 미국 손바닥

'기계학습과 침입탐지: 문법 추론 결과'를 보다 멘붕에 빠진 후, 해당 논문을 이해하려면 자연어 처리 분야에 대한 이해가 먼저인 것 같아 보게 됐다.

총 31장에 걸쳐서 검색, 광고 등의 예제를 보여주고, 문제를 해결하는 데 사용된 알고리즘과 수학 이론을 설명하는 구조.

살짝 쫄았지만 각 장의 연관성이 적어서 크게 부담도 안 되고, 설명도 그리 딱딱하지 않아서 수식 무시하고 읽었음에도 이해하는 데 별로 어렵지 않다?

2019년 4월 25일 목요일

알고 보면 쉬운 이상징후 분석 - 2nd

'알고 보면 쉽다'의 반대말은 '모르면 어렵다'이다. 다음은 웹로그의 여러 상태 중 변수 길이의 변화 추이. 이게 중요하냐는 질문을 받은 적이 있다. 변수 조작 해킹 시연할 때 딴 생각했죠?


2019년 4월 22일 월요일

강의하다 보면 생기는 어려움

14년부터 강의를 시작했다. 처음엔 IDS 로그 분석 과정만 진행하다가, 16년에 이상징후 분석 과정을 추가했고, 작년부터 과정 통합. 두 과정을 통합하면서 엘라스틱을 분석 도구로 추가한 걸 빼면 6년째 거의 같은 내용으로 우려먹는 중(..)

대부분의 내용은 블로그에 공개되어 있다. 최소한 가장 중요하다고 생각하는 데이터 전처리 과정은 거의 같음. 딱히 의도한 건 아니고, 개인 학습 > 블로그 정리 > 강의 연결 과정이 어쩌다 굳어졌다.

강의 아이템 노출 같은 걱정은 전혀 안 된다. 보안 분야는 전통적으로 해킹이 대세고, 로그 분석은 워낙 비인기종목이라(..) 많이 퍼져서 관심이나 좀 높아졌으면 좋겠음.

2019년 4월 14일 일요일

Packetbeat 활용 - 4th

t 옵션과 함께 pcap 파일을 연동하면 flow 데이터의 경우, 시간대가 너무 압축돼서 시계열 분석은 불가능. transaction 데이터는 실제 시계열 인터벌을 갖지만, 지원하는 애플리케이션이 많지 않아서(..)

t 옵션 없이 연동해봤다. 24시간 동안 기록된 pcap 파일 연동하는 데 26시간 소요? 연동 중에 렉 걸렸나? 일단 flow와 transaction 데이터 모두 같은 시간대에 기록된다.


2019년 4월 7일 일요일

Packetbeat 활용 - 3rd

Packetbeat로 pcap 파일을 연동하면 연동 시점의 시간대를 갖는다. 실제 패킷 발생 시간대가 아닌, 연동 시간대를 갖는 인덱스에 저장된다는 얘기. 마음에 안 듬

게다가 패킷 딜레이 시간까지 반영돼서 속도마저 느림. 이때 t 옵션을 주면 딜레이 시간을 무시할 수 있다. 훠얼씬 빠른 연동 가능.


2019년 3월 26일 화요일

알고 보면 쉬운 이상징후 분석

기계학습 기반 이상징후 분석 시스템 개발 과정의 진지한 논의를 엿들은(?) 적이 있다. 옆자리라 그냥 들림 그런데 웹로그 URI에 'select' 등의 쿼리문이나 따옴표 등 특수문자가 포함되면 이상한 거 아니냐는 식의 대화를 많이 하더라. 

특정 문자열 패턴을 이상징후 탐지 기준으로 삼고 싶은 마음은 이해가 간다. 인류가 경험한 가장 효과적인 정보 수집/분석 방법이 패턴매칭이었으니까.


2019년 3월 19일 화요일

Open Distro for Elasticsearch

아마존이 인증, 알람 등 일부 X-Pack 상용 기능이 포함된 엘라스틱서치 배포판을 공개해서 이슈인 모양이다.

링크

2019년 3월 10일 일요일

간만에 Snort(multi source one db)

Snort로 2개 이상의 네트워크를 모니터링하는 방법은 간단하다. 프로세스 2개 띄우면 됨. 2개의 네트워크에서 발생한 탐지로그는 각각 다른 alert.log에 기록된다.


2019년 2월 24일 일요일

Watcher 맛보기

엘라스틱 플래티넘 기능 중 꽤 요긴해보이는 Watcher를 사용해보자. 먼저 threshold alert.


2019년 2월 17일 일요일

Logstash 필터 translate

로그스태시는 다양한 문자열 치환 기능 필터 플러그인을 제공하는데, ruby 플러그인을 이용하면 다음과 같은 문자열 치환이 가능하다.
filter {
  ruby {
    code => '
      num = 0
      for i in ["system_start","unknown","interactive","network","batch","service","unknown","unlock","network_cleartext","new_credentials","rdp","cache_interactive"]
        if event.get("[event_data][LogonType]").match("#{num}")
          event.set("logon_type","#{i}")
        end
        num += 1
      end
    ' 
  }
}

2019년 2월 11일 월요일

모두 거짓말을 한다

(간만의 북리뷰. 짜임새가 탄탄할수록 리뷰가 잘 써진다. 고로 한동안 리뷰가 뜸했던 이유는 내가 게을러서가 아니라 책들이 잘못한 거임. 이 책도 음.. 아니다)

구글 트렌드로 미국 지역별 인종차별 성향의 실체를 밝혔다가 구글에 채용됐다는 세스 스티븐스 다비도위츠의 2017년 저서.

제목에 끌려서 골랐는데 구글 검색 데이터가 인간 심리 및 행동 예측에 유용하다는, 그리 새롭지는 않은 내용.

대신 저자 유머 코드가 나랑 좀 맞아서 지루하지 않게 읽을 수 있었다(..) 이 책은 저자가 구글 트렌드로 인종차별 지도를 그리면서 시작한다.

2008년 버락 오바마의 대통령 당선은 유구했던 미국 인종차별주의 퇴색의 방증이라는 의견이 많았었다. 그런데 웬걸, 같은 기대를 했던 저자가 구글 검색어를 뒤져보니

2019년 1월 29일 화요일

2019년 1월 27일 일요일

Logstash 필터 date

리눅스 secure 로그는 연도를 기록하지 않는다.
Nov 30 02:38:21 Sensor sshd[2264]: Accepted password for root from 192.168.56.1 port 8246 ssh2
Dec  1 03:44:36 Sensor sshd[13361]: Received disconnect from ::ffff:192.168.244.18: 11: Disconnect requested by Windows SSH Client.
Dec  1 03:45:21 Sensor sshd[2354]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec  1 03:45:27 Sensor login: pam_unix(login:session): session closed for user root
Dec  1 03:46:28 Sensor sshd[1445]: Received signal 15; terminating.
Dec  1 03:46:28 Sensor sshd[1883]: Exiting on signal 15
Dec  1 03:46:28 Sensor sshd[1883]: pam_unix(sshd:session): session closed for user root

로그스태시 연동 시 date 필터 플러그인은 이런 로그의 연도를 알아서 추정(?)하는데, 항상 로그 연동 시점의 연도가 적용된다. 작년까지 그랬음. 그런데 올해 첫 강의에서 희한한 경험을 했다. 다음은 로그스태시 연동 설정.

2019년 1월 14일 월요일

Logstash 설정과 한글

윈도우 이벤트 로그 5156은 네트워크 연결 허용을 의미하며, 이때 '연결, 수신/수락' 등의 의미를 추가로 알려준다.


2019년 1월 1일 화요일

2018년에 있었던 일

시간 정말 잘 간다. 벌써 2019년. 작년에 뭘 했지? 14년부터 한 교육기관에서만 강의를 해왔는데 작년부터 출강 기관을 늘렸다. 그래봐야 두 곳이지만(..)

기존 기관이 보안 전문이었다면, 새로 계약한 곳은 IT 관련 분야를 거의 총망라한 교육을 진행한다. 아무래도 성격이나 규모의 차이가 있다보니 초반 시행착오 발생.

과거엔 좀 빡세게 진행해도 무난했던 느낌이었다면, 새로운 곳에서는 전반적으로 교육을 여유있게 받고 싶어한다는 느낌을 받았다. 물론 커리큘럼이나 교육 기간 등이 다르기 때문에 단순 비교는 어렵지만 일단 어렵다는 피드백을 자주 접함(..)

기존에 교재만으로 개인학습이 가능한 수준을 목표로 1일 200페이지 기준(SANS 기준이라나?)의 강의를 해왔던데다, 새 강의를 계획할 때 환경 구축 과정을 보강하면서 의욕이 너무 앞섰나? 강의량이 좀 많았나 보다.

크리에이티브 커먼즈 라이선스