※ 본 게시글은 작성자의 개인 공부, 정리 용도로만 작성되었으며, 이를 악용하여 발생한 문제의 책임은 행위자 본인에게 있음을 알립니다.
머신 러닝 알고리즘은 종종 보안을 염두에 두고 설계된 것이 아니기 때문에 공격자들의 공격 시도에 취약한 경우가 많습니다.
따라서 보안을 위한 머신 러닝 시스템을 설계 및 구축할 때 이러한 위협 모델에 대해 인지하고 있어야 합니다.
보안 분야에서 사용하는 머신 러닝의 기술은 패턴 인식(pattern Recognition)과 비정상 탐지(Anomaly Detection) 두 분류로 구분할 수 있습니다.
데이터의 특정 하위 집합에 존재하는 패턴을 학습하지 않고, 주어진 데이터셋의 대부분(가령 약 95% 이상)을 해석할 수 있는 정규성을 찾아내는 것입니다.
이후 이를 벗어나는 편차는 비정상으로 탐지합니다.
패턴 인식
- 속성 집합을 정의한 뒤 알고리즘을 통해 동일한 속성을 보유한 다른 형태의 데이터를 인식하는 데 사용.
- 악성 코드 및 봇넷 탐지로 공격자가 탐지를 피하기 위해 다형성 기법을 사용할 때 특히 유용하게 사용.
비정상 탐지
- 같은 문제를 다른 시각에서 바라보며, 문제를 해결하는 접근법.
일반적으로 비정상 탐지를 정상 패턴과 비정상 패턴을 구별해내는 문제로 잘못 생각합니다.
패턴 인식으로부터 추출된 패턴은 반드시 관측 데이터로부터 추출돼야 하며, 학습 과정에 사용돼야 합니다.
반면 비정상 패턴은 학습 또는 테스트 데이터셋에 존재하지 않는 임의의 데이터에서 파생된 무수히 많은 예외적인 패턴을 의미합니다.
스팸 메일 탐지로 알아보는 패턴 인식 및 비정상 탐지를 위한 머신러닝
스팸 메일 탐지를 위해 사용할 알고리즘은 총 3가지(Blacklist, LSH, Naive Bayes)이며 이를 비교합니다.
스팸 메일 탐지
데이터 : 2007 TREC Public Spam Corpus, total : 75,319(train 70%, test 30%)
Label : {spam : 0, ham : 1}
1) 반복 접근법(블랙리스트 기반)
스팸 데이터에 많이 포함되어 있는 단어를 NLTK로 토큰화(Tokenize) 하여 블랙리스트로 만들고, 이에 속한 단어가 포함되어 있는지의 검사로 분류 작업을 수행.
*토큰(Token)
문법적으로 더 이상 나눌 수 없는 언어 요소.
실습
각 메일을 토큰화 하여 블랙리스트와 &연산으로 예측을 진행하였습니다.
데이터 수 : 실습(22,626), 예제 코드(21,196)
※ 예제 코드에서는 전처리 오류로 전체 메일의 5.8%는 분류되지 않았다고 합니다. 이에 대해서는 아시는 분은 알려주시면 감사하겠습니다.
실습(22,626) / 예제 코드(21,196) | 햄으로 예측 | 스팸으로 예측 |
실제 햄 | (5460, 24.13%) (5411, 25.52%) |
(1115, 4.92%) (1115, 5.26%) |
실제 스팸 | (7235, 31.97% (5854, 27.61%) |
(8816, 38.96%) (8816, 41.59%) |
※ 실습에서는 Label : {ham : 0, spam : 1} 로 두고 진행하였고, 오차행렬은 Scikit-learn의 confusion_matrix를 사용하였습니다.
정확도
실습코드 : 63.09%
예제코드 : 67.11%
정확도가 그리 높지 않은 이유는 간단합니다. 블랙리스트 기반으로 구분하였을 때 실제 메일에 블랙리스트에 들어있는 단어를 사용할 수도 있고, 블랙리스트에 정상적인 단어를 사용할 수도 있기 때문입니다.
2) 퍼지해시 알고리즘, LSH(지역민감 해상)을 사용한 스팸 메일 필터링
* 퍼지해시 알고리즘(Fuzzy Hash Algorithm)
퍼지해시 알고리즘은 입력 값을 여러 조각으로 분리한 후 각각의 조각에 해시를 사용하여 하 나의 결과를 만든다. 그리고 계산된 결과를 비교하여 얼마나 유사한지 확인합니다.
MinHash, LSH(Locality-sensitive hashing, 지역 민감 해싱) 두개를 사용하여 이메일이 스팸과 어느정도 유사한지 판단할 수 있습니다.
스팸 메시지에 퍼지 해시를 적용하여 유사한 해시를 보이는 이메일을 스팸 메일로 취급하여 필터링
이는 스팸 발송자는 자동화된 시스템을 통해 스팸 메일을 전송하므로 각각의 스팸 메일은 변형이 거의 없다는 가정을 둡니다.
실습
datasketch 패키지를 이용하여 MinHash와 LSH 알고리즘을 사용합니다.
이는 스팸 집합의 특징을 찾아내기 위해 문자열 탐색 비용을 크게 줄여 성능을 높일 수 있습니다.
MinHash는 원본 문자열의 특징을 유지한 채 짧은 형태의 유사성 탐색이 가능한 토큰으로 변환시킵니다.
LSH는 MinHash가 생성한 토큰에 적용할 수 있으므로 성능을 크게 향상시킬 수 있습니다.
Minhash는 속도 향상을 위해 정확도에서 약간의 손실을 유발할수 있기 떄문에 fp, fn이 늘어날 수 있습니다.
퍼지 문자열 탐색을 훈렬 셋에 있는 n개의 스팸 이메일에 그대로 적용한다면 O(n)의 복잡도를 갖게 됩니다.
또는 O(n)의 공간 복잡도를 갖게 되므로 이러한 제약사항을 고려해 속도와 복잡도의 균형을 설정할 수 있습니다.
실습(22,626) / 예제 코드(21,196) | 햄으로 예측 | 스팸으로 예측 |
실제 햄 | (6496, 28.71%) (6447, 30.5%) |
(79, 0.03%) (79, 0.4%) |
실제 스팸 | (6731, 29.74%) (5320, 25.2%) |
(9320, 41.19%) (9286, 43.9%) |
정확도
실습코드 : 69.9%
예제코드 : 74.56%
3) Naive Bayes classification
나이브 베이즈 분류를 사용하면 더 나은 결과를 얻을 수 있습니다.
실습
sklearn의 MultinomialNB를 통해 간단한 방식으로 나이브 베이즈 분류기를 사용할 수 있습니다.
이때 이메일 전처리는 이전 실습과 동일하지만 종료 문자를 제거하거나 NLTK로 형태소를 분석하는 과정을 거치지 않고 이메일의 제목과 본문(개행 문자로 구분)을 그대로 입력하는 방법을 사용합니다.
실습(22,626) | 햄으로 예측 | 스팸으로 예측 |
실제 햄 | (7436, 32.86%) | (155, 0.68%) |
실제 스팸 | (842, 3.72%) | (14193, 62.72%) |
※ 예제 코드에 대한 confusion matrix가 없어 실습 결과만 작성하였습니다.
약 95%의 정확도로 이전의 blacklist와 LSH보다 훨씬 좋은 결과가 나타난 것을 알 수 있습니다.
참고문헌 및 출처
1. "머신 러닝을 활용한 컴퓨터 보안, 클라렌스 치오, 데이비드 프리먼, 에이콘"
"Machine Learning and Security by Clarence Chio and David Freeman(O'Reilly). Copyright 2018 Clarence Chio and Davide Freeman, 978-1491-97990-7"
2. 퍼지 해시 알고리즘 : "박창욱(고려대학교), 정현지(고려대학교), 서광석(한국정보보호교육센터), 이상진(고려대학교)
2012.12 "퍼지해시를 이용한 유사 악성코드 분류모델에 관한 연구", 정보보호학회논문지 제22권 제6호, 1,325 - 1,336(12 pages)" https://www.koreascience.or.kr/article/JAKO201208138130922.pdf
MinHasing : https://lifemath.tistory.com/7
[데이터 마이닝] Min-Hashing 란?
이번 포스팅에서는 데이터 마이닝 기법 중 Min-Hashing 알고리즘에 대해서 알아보겠다. Min-Hashing 란? Min-hashing 알고리즘은 데이터의 차원을 줄여서 줄어든 차원의 정보 만으로 클러스터링 하였을 때
lifemath.tistory.com
나이브 베이즈 분류 - 위키백과, 우리 모두의 백과사전
기계 학습분야에서, '나이브 베이즈 분류(Naïve Bayes Classification)는 특성들 사이의 독립을 가정하는 베이즈 정리를 적용한 확률 분류기의 일종으로 1950 년대 이후 광범위하게 연구되고 있다. 통계
ko.wikipedia.org
https://jhryu1208.github.io/data/2020/11/14/naive_bayes/
[ML with Python] 2. 지도 학습 알고리즘(3) 나이브 베이즈 분류
[ML with Python] 2. 지도 학습 알고리즘 (3) 나이브 베이즈 분류 본 포스팅은 지도 학습 알고리즘인 나이브 베이즈에 관한 기본적인 내용에 관하여 다룹니다. 나이브 베이즈(naive bayes) BernoulliNB Multinomi
jhryu1208.github.io
'Security > AI' 카테고리의 다른 글
머신러닝을 활용한 악성코드 분석 - 파이썬 스크립트 실행 프로세스 (0) | 2021.11.28 |
---|---|
머신러닝을 활용한 악성코드 분석 - 빌드 프로세스 (0) | 2021.11.19 |
머신러닝을 활용한 악성코드 분석 - 악성코드 (0) | 2021.11.04 |
Naive Bayes(나이브 베이즈) (0) | 2021.10.31 |
MinHash와 LSH(Locality Sensitive Hashing) (0) | 2021.10.29 |