반응형

예를 들어, 구글 서비스의 비밀번호를 변경하기 위해서 IP : 111.111.111.111 로부터 메일이 왔다고 하자. 메일의 발송인에 From : abc@google.com 라고 표시되어 있다고 한다. 그런데 이 메일이 진짜 구글로부터 온 것일까? 어떤 해커가 사기칠려고 구글로 위장해서 메일을 보낸 것이라면 어떻게 이를 알 것인가?

 

 이를 확인 할 수 있는 것이 SPF, DKIM, DMARC를 통한 검증이다. 

 

1. SPF (Sender Policy Framework)

https://en.wikipedia.org/wiki/Sender_Policy_Framework

 

Sender Policy Framework - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Simple email-validation system designed to detect email spoofing Sender Policy Framework (SPF) is an email authentication method designed to detect forging sender addresses during the

en.wikipedia.org

 

그림 1. SPF 인증 절차 (출처 : https://postmarkapp.com/guides/spf) 

1.1 SPF란?

 SPF는 누군가(google.com)로부터 메일이 발송되었을 때, 이 메일의 발송지(111.111.111.111)가 진짜 google.com으로부터 발송된 메일인지 확인하는 시스템이다. 만약 이 주소가 진짜라면 google.com은 DNS 서버에 '이 IP로 보낸 것은 저(google.com)입니다.' 라고 등록한다. 이를 SPF record (혹은 TXT record)라고 한다. 

 

 즉, 특정 도메인이 DNS 서버에 자신의 메일 서버를 등록시키고, 메일 수신자가 발송 서버를 검증할 수 있도록 만든 것이다.

 

 

1.2 SPF를 쓰는 이유는?

 이런 일이 있을 수 있겠다. 어떤 스팸 업자가 자신의 제품을 홍보하기 위해서 구글의 이름을 사칭한다고 하자. 즉, 발송 도메인을 spam@google.com이라고 위조하는 것이다. SPF가 없을 때, 대다수의 사용자들은 이 스팸 메일을 받아도 "구글에서 보낸 것이니 믿을만 하겠지?" 라고 생각해서 열어보게 될 것이다.

 

 이를 방지하기 위해서 수신 메일 서버들은 어떤 송신 메일 서버로부터 어떤 메일을 수신했을 때, 이 도메인에 해당 송신 메일 서버가 유효한 서버인지 검증하는 것이다.

 

 사실 지금은 유저 수신자의 입장에서 서술하고 있지만, 실은 어떤 도메인의 소유자를 위한 보안이라 할 수 있겠다. 예를 든 google같은 경우에는 얼마나 많은 스팸업자들이 google을 사칭하고 싶어하겠는가? 그래서 google은 DNS 서버에 자신이 허가한 메일 송신 서버를 등록해둠으로서 스팸업자들이 자신을 사칭하는 것을 예방할 수 있는 것이다. 

 

 

1.3 SPF의 절차는?

위 그림 1에 설명이 잘 나와있다. 만약, IP 1.2.3.4에서 이메일이 도착했다고 하자. 이 메일의 Return Path(반송처;메일에 답장을 보냈을 때, 답장이 도착하는 주소)는 bounces@example.com이다. 수신 서버는 이 메일을 받았을 때, example.com에 1.2.3.4에게 자신의 도메인(example.com)을 사용할 수 있도록 했는지 검증해봐야한다. 만약 1.2.3.4가 example.com의 허가를 받은 메일 서버라면 SPF Record에 1.2.3.4가 등록되어있을 것이다. 그래서, 등록되어있다면 SPF를 통과할 것이다. 

 

 

1.4 왜 Return Path 를 검증하는가?

 사실 SPF는 Mail From (실제 메일을 보낸 주소)을 검증하는 것이 아니라 Return Path 를 검증한다. Return Path는 기본적으로 Mail From 과 동일하게 설정되어있고 대부분의 경우에도 동일하지만, 다른 경우에는 왜 Mail From을 검증하는 것이 아니라 Return Path를 검증하는 것일까?

 

만약 이런 일 있을 수 있겠다. A라는 고객이 B라는 쇼핑몰을 이용하고 있는데, 회원 가입를 위해 B쇼핑몰이 개인정보 인증을 권위가 있고 신뢰할 수 있는 인증사이트 C를 통해 인증을 받도록 한다고 하자. A는 B로부터 메일을 받게 되겠지만 반송처는 C 인증사이트로 개인정보를 보내게 될 것이다.

 

 C라는 곳은 믿을만 하지만 B쇼핑몰은 새로 생겨서 딱히 믿을만한 곳인지 모르겠다. 이럴 때, SPF를 통해 C에게 B가 믿을 만한 곳인지 확인할 수 있는 것이다. (만약 예제 활용이 틀렸다면 언제든지 댓글로 알려주세요.)

 

 

 

2. DomainKeys Indetified Mail (DKIM) 

https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail

 

DomainKeys Identified Mail - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Email authentication method designed to detect email spoofing DomainKeys Identified Mail (DKIM) is an email authentication method designed to detect forged sender addresses in email (e

en.wikipedia.org

2.1 DKIM 이란?

 DKIM 은 메일이 전송 중에 다른 사람(해커 등)에 의해서 변조되지 않았는지를 검증하는 절차이다.

 

 

2.2 왜 DKIM을 사용하는가?

 도메인 사용자가 메일을 전송했는데, 중간에 변조되어 스팸메일이나 악성 메일이 되어버린다면 영락없이 도메인 사용자가 죄를 뒤집어 쓰게 될 것이다. 이를 위해 도메인 사용자는 DKIM을 사용하여 수신자가 메일을 받았을 때 이 메일이 변조되지 않았다는 것을 확인하고, 이를 증명해야한다(마치 옛날에 밀랍으로 편지를 봉인함으로써 중간에 편지가 다른 사람에 의해 바뀌지 않았다는 것을 증명했듯이).

 

 

2.3 DKIM의 절차는?

  DKIM은 공개키/사설키를 사용하여 진행된다.

도메인이 메일을 발송할 때, 발송 서버는 사설키로 해시값을 만들고 이를 헤더에 넣어 발송한다. 메일 수신 서버가 메일을 받으면 발송자의 도메인의 DNS에 있는 공개키로 복호화한다. 복호화한 해시값을 확인하여 메일이 중간에 변조되었는지를 확인할 수 있다.

 

 

 

3. DMARC (Domain-based Message Authentication, Reporting and Conformance)

https://en.wikipedia.org/wiki/DMARC

 

DMARC - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search System to prevent email fraud This article is about an email validation system. For the telephony junction point, see demarcation point. DMARC (Domain-based Message Authentication, Rep

en.wikipedia.org

3.1 DMARC란?

 DMARC는 spoofing (발신자 정보를 위조하는 것)을 예방하기 위해 만들어진 보안 방법이다. DMARC는 위에서 소개한 SPF와 DKIM에다가 Reporting을 추가하였다. 

 

 

3.1 Reporting이란? 

 DMARC를 채택한다면 일반적으로 하루에 한 번 종합 보고서;Aggregate reports 를 받게 된다. 이 보고서는 XML 파일로 보내지며 해당 도메인으로부터 보내진 (혹은 보내졌다고 위조된) 메일들이 DMARC 인증 절차를 통과했는지를 알려준다. 이를 통해 발신측은 정상 메시지 중 인증 실패 비율이나 얼마나 많은 사칭 메일이 발송되고 있는가를 파악할 수 있게한다.

(참고 : DMARC 리포트 (jeesub.github.io))

 

 

3.2 DMARC를 쓰는 이유

 SPF 와 DKIM은 좋은 인증 방식이지만 각각에는 허점이 있다. SPF는 중간에 메일이 변조되어서 피싱 메일로 바뀌어도 이를 검증할 수 없고, DKIM의 경우는 해당 메일 자체가 피싱 사이트에서 왔어도 검증할 수 없다. 그래서 DMARC 는 이 둘을 모두 사용하여 1. 메일이 제대로 된 곳에서 왔는지 2. 메일이 위/변조 되지 않았는지를 검증한다. 

 

 

 

뒤로 가면 갈수록 짧아지는 것은 기분탓이다. -.-

 

참고자료)

 

https://ichi.pro/ko/spf-dkim-mich-dmarce-daehan-jjalb-eun-ibmunseo-167297216886173

 

SPF, DKIM 및 DMARC에 대한 짧은 입문서

더 많은 약어가 없으면 기술이 될 수 없습니다! 오늘 버전의 Buzzword Soup에서 SPF, DKIM 및 DMARC를 살펴보고받은 편지함을 괴롭히는 피싱 재앙을 막는 데 어떻게 도움이 될 수 있는지 살펴 보겠습니다

ichi.pro

 

https://medium.com/tresorit-engineering/securing-your-corporate-e-mail-system-ab302e68980c

 

Securing your corporate e-mail system

The problem with e-mails

medium.com

https://postmarkapp.com/guides/spf

https://postmarkapp.com/guides/dkim

https://postmarkapp.com/guides/dmarc

 

DKIM: What is it and why is it important?

DKIM is an email security standard designed to make sure messages weren’t altered in transit between the sending and recipient servers.

postmarkapp.com

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=aepkoreanet&logNo=222009758877 

 

이메일 보안을 위한 DMARC

DMARC(Domain-based Message Authentication, Reporting and Conformance)는 이메일 Validation...

blog.naver.com

 

https://firecatlibrary.tistory.com/135

반응형

'IT기술 관련 > 정보보안 관련' 카테고리의 다른 글

Splunk stats 함수  (0) 2023.09.13
Splunk - eval 함수  (0) 2023.09.13
Splunk 자주 사용하는 명령어  (0) 2023.09.13
Splunk 란?  (0) 2023.09.13
반응형

출처:https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=monoris30&logNo=221317127486

 

이제부터는 숫자로 된 필드 값을 계산하거나 필드 값을 다른 곳에서 사용하기 위해서 필드의 데이터를 추출하는 방법을 살펴본다. Splunk는  이런 기능을 위해서 stats함수를 제공한다.  평균값, 최대값, 최소값 등 수학 계산을 지원하는 통계함수를 사용할 수 있다.  

stats 명령어와 함수 사용
stats는 각종 통계 함수를 이용해서 데이터를 계산한다. 사용할 수 있는 통계 함수로는 숫자(count), 중복제거 개수(dc), 총합(sum), 평균(avg), 목록(list),  중복제거 목록(values) 등이 있다. 기술통계에서 많이 사용하는 최대값(max), 중앙값(median), 최소값(min), 분산(var), 표준편차(stdev) 역시 지원한다. 각 함수들은 필드명을 인자로 받아서 해당 함수가 제공하는 기능에 따라 값을 반환한다. 사용 방법은 다음과 같다. 

 

... | stats [count|dc|sum|avg|list|values] by [필드명]

 

by 필드명 기중으로 Groub by를 해줌 => 같은 필드끼리 합쳐서 보여줌

 


통계 함수인자로 사용하는 필드의 데이터는 숫자값을 포함하고 있어야 한다. values 함수, list 함수는 목록을 만들어주는 함수이므로 필드값이 숫자나 문자 모두 가능하다. 그 외 다른 함수들은 숫자 형식의 데이터를 입력으로 받는다. stats에서 많이 사용하는 함수의 목록은 아래와 같다. 

함수명 설명
count(X) X 필드의 개수를 반환한다.
dc(X) X 필드의 중복을 제거한 개수를 반환한다.
sum(X) X 필드의 총합을 반환한다.
avg(X) X 필드의 평균을 반환한다.
list(X) X 필드를 목록으로 만들어 반환한다.
values(X) X 필드의 중복을 제거한 목록을 반환한다.
max(X) X 필드의 최대값을 반환한다.
median(X) X 필드의 중앙값을 반환한다.
min(X) X 필드의 최소값을 반환한다.
var(X) X 필드의 분산값을 반환한다.
stdev(X) X 필드의 표준편차를 반환한다.
earliest(X) X 필드의 가장 먼저 들어온 값을 반환한다.
latest(X) X 필드의 가장 최근 시간 값을 반환한다.


대부분 함수의 이름에서 기능을 바로 이해할 수 있을 것이다. 한 가지 생각해야 할 것은 필드 X가 로그 한 줄을 의미하지 않는다는 점이다. 각 로그가 필드로 구분되어 있다면 추출하는 로그의 집합에서 특정 필드를 의미하는 것이다. 즉, 1학년 전체 학생에서 국어 과목의 평균을 구하는 것이다. 그러므로 stats 함수는 검색어의 처음에 나올 수 없다. 계산을 위한 범위를 앞의 검색에서 추출해서 stats 함수에 넘겨주면 그 결과를 기반으로 계산을 하기 때문이다. 이것은 나중에 살펴볼 streamstats, eventstats 함수도 동일하게 적용되는 내용이다. 

반응형

'IT기술 관련 > 정보보안 관련' 카테고리의 다른 글

SMTP의 보안 시스템 :: SPF, DKIM, DMARC 란?  (0) 2024.01.16
Splunk - eval 함수  (0) 2023.09.13
Splunk 자주 사용하는 명령어  (0) 2023.09.13
Splunk 란?  (0) 2023.09.13
반응형

출처: https://blog.naver.com/monoris30/221313548867

Splunk 검색에서 eval 과 stats 명령어는 매우 빈번하게 사용한다. 그러므로 사용자들은 두 명령어에서 사용하는 내장 함수에 익숙해야 한다.
    
eval 함수
 
eval 명령어에 사용하는 함수들은 변수에 대한 각종 조작, 검증을 수행하며, 함수 실행 결과값을 반환하는 형식이다. 그러므로 항상 다음과 같이 사용해야 한다.   [반환값_저장변수] = 함수(인자1, 인자2.. )
대부분의 eval 함수는 문자열을 인자로 취하고 이를 계산한 결과를 반환한다. 문자열은 ""로 감싸서 표시하고, 문자열을 반환하는 함수는 그 자체가 문자열이 될 수 있다.
 
case(X,"Y",...)
여러 개의 조건을 검증할 때 사용한다. 두 개의 인자가 한 그룹으로 동작하고,  첫 번째 인자가 참인 경우 두 번째 인자의 내용이 반환된다. 아래 예제는 HTTP 상태코드와 연결하는 설명을 반환하는 예제코드다. 

... | eval description=case(error == 404, "Not found", error == 500, "Internal Server Error", error == 200, "OK")

--> error가 404 이랑 같을 경우 "Not found 반환, error가 500이랑 같을 경우 "Internal Server Error" 반환 


cidrmatch("X",Y)
IP 주소 Y가 네트워크 X에 포함되는지 확인한다. 반환 값은 참 또는 거짓이다. 그러므로 if문과 같은 함수의 인자로 사용될 수 있다. 아래 예제 코드에서는 참을 반환한다. 두 개의 인자가 사용되고, 첫 번째는 CIDR 형식의 네트워크, 두 번째는 검사를 위한 IP 주소가 입력된다.

 

…| eval local = cidrmatch(“10.0.0.0/8”, "10.10.0.100”)


cidrmatch 함수는 검색 필터로 사용할 수 있다. 

| where cidrmatch(“172.16.0.0/16”, ip)


 
if(X,Y,Z)
만일 X가 참이면 두 번째 인자인 Y가 반환되고 X가 거짓이면 세 번째 인자인 Z가 반환된다. 앞에서 살펴본 cidrmatch 함수를 사용하여 if함수를 아래와 같이 이해할 수 있다. 예제코드를 실행하면 test 변수에는 "OK"라는 문자열이 저장된다.

eval network=if(cidrmatch("10.10.0.0/24", "10.10.0.100"), “local”, “non_local”)


이 예제 코드에서는 network 변수에 local 문자열이 저장된다.
 
like(X,"Y")
두 개의 인자를 사용하며, 첫 번째 인자는 탐색 대상 문자열, 두 번째 인자는 탐색 패턴을 의미한다. X에서 Y를 찾을 수 있으면 참을 반환한다.  SQL의 Like문과 동일한 효과를 가진다.

like(field, "addr%")


이 함수 역시 검색 필터로 사용할 수 있다.

… | where like(field, "foo%")

 

반응형

'IT기술 관련 > 정보보안 관련' 카테고리의 다른 글

SMTP의 보안 시스템 :: SPF, DKIM, DMARC 란?  (0) 2024.01.16
Splunk stats 함수  (0) 2023.09.13
Splunk 자주 사용하는 명령어  (0) 2023.09.13
Splunk 란?  (0) 2023.09.13
반응형

출처: https://peemangit.tistory.com/365

1. 데이터 나열 변환

1) table

필드명과 결합해 검색 결과를 테이블 형식으로 보여준다.

 

 
index="book" sourcetype="access_combiend_wcooke"
 
| table clientipm method, productId, status

 

 

원하는 결과에서 내가 원하는 필드를 테이블 형태로 만들어서 출력할 수 있다.

 

2) rename

필드명을 다른 이름으로 변경한다.

로그에서 필요한 필드명에 의미를 부여하거나 필드에 한글을 쓰고 싶을 경우 사용할 수 있다.

변환하고자 하는 필드명을 띄어쓰기도 포함하고 싶다명 따옴표(")를 붙여주면 된다.

 
index="book" sourcetype="access_combined_wcookie"
 
| table clientip, method, productId, status
 
| rename clientip AS SourceIP, method AS "Get Or Post", productId AS ProductID, status AS "Web Status"

 

 

테이블에 있는 필드명이 기존의 필드명이 아닌 rename을 통해 변경된 이름으로 바뀐것을 확인할 수 있다.

 

3) fields

검색 결과에서 특정 필드를 포함시키거나 제거할 경우 사용한다.

 

 
index=book sourcetype="access_combined_wcookie" status="200"
 
|fields clientip

검색 결과에서 원하는 필드만 추출할 수 있다.

이벤트의 개수는 필드를 적지 않아도 같지만 불필요한 필드를 사용하지 않음으로써 검색 시간을 줄일 수 있다.

 

 

- 옵션을 이용해서 원하는 필드만 제거도 가능하다.

 
index=book sourcetype="access_combined_wcookie" status="200"
 
|fields - clientip

4) dedup

검색결과에서 중복제거를 할 때 사용한다.

지정한 필드의 중복을 제거하면 다른 필드의 값은 중복이 아닌데도 앞의 중복된 결과를 제거하면석 역시 사라지니 주의해야 한다.

 

 
index=book sourcetype="access_combined_wcookie" status="200"
 
| dedup clientip

 

출력된 Client IP가 중복되지 않았음을 확인할 수 있다.

 

5) sort

검색 결과를 정렬한다.

+(default) 옵션은 오름차순이고 -옵션은 내림차순이다.

 
index=book sourcetype="access_combined_wcookie" status="200"
 
| table date_hour, clientip, productId, method, status
 
| sort date_hour, -method

 

테이블을 생성한 후 시간을 오름차순 methiod를 내림차순으로 정렬하였다.

시간은 00시부터, method는 POST방식이 먼저 출력된것을 확인할 수 있다.

 

6) 데이터 나열 변환 명령어 정리

명령어 옵션 설명
table   결과를 테이블 형태로 출력
rename   필드명을 다른 이름으로 재정의
fields +(default) 추가 , - 제거 원하는 필드만 추출, 원하는 필드만 제거
dedup   중복제거
sort +(default) 올림차순 , - 내림차순 검색 결과 정렬

2. 통계 계산

1) stats

각종 통계 함수를 이용해 통계를 계산한다.

stats [count|dc|sum|avg|list|value] by [Field name]

 

stats 옵션 설명
count 개수
dc 중복을 제거한 개수
sum 합계
avg 평균
list 목록
values 중복제거 목록
max 최대 값
median 중간 값
min 최소 값

 

clientip 기준으로 전송한 bytes의 합계, 평균, 최대 값, 중간 값, 최소 값의 통계를 구할 수 있다.

중간 값은 데이터가 홀수개일 경우 (n-n/2) 짝수개일 경우(n/2번째 값 +(n/2) +1번째값)/2 이다

 
index=book sourcetype="access_combined_wcookie"
 
| stats sum(bytes), avg(bytes), max(bytes), median(bytes), min(bytes) by clientip

 

각각의 통계 값의 결과가 출력된것을 확인할 수 있다.

 

 

stats 명령어와 sort 명령어를 이용하여 해당 시간대의 가장 많은 패킷을 보낸 사람을 내림차순으로 확인할 수 있다.

 
index=book sourcetype="access_combined_wcookie"
 
| stats sum(bytes) by clientip
 
| sort -sum(bytes)

 

특정 시간대의 이상징후를 파악할 때 유용하다.

 

2) top

지정한 필드에서 가장 많이 나오는 값을 보여준다.

 

<검색어> | top limit=<숫자> [showperc=T/F] [showcount=T/F] [useother=T/F] Field1, field2, by field
top 옵션 설명 기본 값
limit 반환되는 결과 지정 10
showperc 해당 값이 차지하는 비율 출력 T
showcount 해당 값의 개수 출력 T
userother Top 10 이외의 다른 숫자 확인  

 

 

상태 값이 200인 로그 중 클라이언트 IP가 91.205.189.15를 출력하는데 시간 기준으로 접근한 클라이언트의 Top10을 Count로 표시하지 않고 비율로 표시하는 명령어이다.

 

 
index=book sourcetype="access_combined_wcookie" status="200" clientip="91.205.189.15"
 
| top limit=10 showperc=T showcount=F date_hour by clientip

 

1시, 13시, 17시 순으로 해당 사용자가 많이 접근한것을 확인할 수 있고 각각 접속 비율을 16, 12, 9퍼센트인것을 확인할 수 있다.

 

 

상태 값이 200인 로그 중에 클라이언트 IP가 접근 한 횟수의 Top5를 출력한다.

rename 명령어를 추가로 사용하여 테이블 가독성을 높혔다.

 

 
index=book sourcetype="access_combined_wcookie" status="200"
 
| top limit=5 showcount=T showperc=F clientip
 
| rename clientip AS "출발지 주소", count AS "접근 횟수"

 

접근 횟수의 Top5가 출력된는것을 확인할 수 있다.

 

 

접속 실패를 가장 많이 한 사용자 Top10 출력

 
index=book sourcetype="access_combined_wcookie" status="40*"
 
| top limit=10 clientip

3) rare

top 명령어의 정반대 결과인 빈도가 적은 값의 순서를 보여준다.

필수 프로그램을 설치하지 않은 PC를 확인하거나, 허가받지 않은 프로그램을 찾아내기 유용하다.

 

<검색어> | rare limit=<숫자> [showperc=T/F] [showcount=T/F] [useother=T/F] Field1, field2, by field

 

반응형

'IT기술 관련 > 정보보안 관련' 카테고리의 다른 글

SMTP의 보안 시스템 :: SPF, DKIM, DMARC 란?  (0) 2024.01.16
Splunk stats 함수  (0) 2023.09.13
Splunk - eval 함수  (0) 2023.09.13
Splunk 란?  (0) 2023.09.13

+ Recent posts