Search
Duplicate

[BOB12] 데분씹듣맛즐_취약점분석_박상준

취약점 분석 트랙 박상준

개요

Dobule and Nothing : Understanding and Detecting Cryptocurrency Giveaway Scams를 읽고 논문의 데이터 셋을 활용하여, 개인의 아이디어로 데이터를 분석하고 결과물을 제출해라.
논문은 Bitcoin과 관련해 Scam Site들에 대해 다루고 있으며 데이터 셋에서는 스캠 사이트들의 도메인 이름, IP주소, 사이트의 활동시간 등이 있다.

데이터 분석

논문 데이터셋을 이용하여 도출할 수 있는 내용들은 논문에서 대부분 구현되어 있었으며 논문의 데이터셋에서 도메인 이름은 이미 폐쇄되어서 논문에 나온 내용처럼 웹 사이트의 내용을 기반으로 데이터 셋을 더 활용하기는 어려웠습니다.

Pattern Of Domain Name and Clustering

그래서 저는 사용자들이 속기 쉬운 도메인 네임의 패턴을 파악하고자 했습니다. 생각을 해봤는데 사람들을 속이기 위해서는 신뢰감을 주는 도메인 이름과 친숙한 이름의 도메인 이름을 사용해야하기 때문에 사람들이 잘 속는 도메인 이름들을 파악하는 것이 중요하다고 생각했습니다.
naver.world 보다는 naver.com 을 사람들이 더 신뢰하고 sangjun.xyz 보다는 elonmusk.xyz
를 더 많이 누를 것이라고 생각했습니다.
그래서 먼저 Word2Vec를 사용해 도메인 네임에서 단어가 가진 의미들을 벡터화 시켜 단어들을 3D맵에 맵핑시켜 보아 어떤 의미를 가진 것을 사람 스캠당하기 쉬운 것인지 알아보았습니다.
그래서 아래 단계들을 통해 단어들의 위치를 시각화했습니다.
1.
csv파일에서 도메인 이름을 파싱함.
2.
Word2Vec모델에 단어를 학습시키고 단어를 벡터화 함.
3.
Word2Vec모델이 도출한 3차원 이상의 벡터값을 가진 벡터를 t-SNE를 이용하여 3차원으로 축소함.
4.
matplotlib 을 이용하여 3차원 벡터를 3D에 맵핑함.
5.
단어들의 구성을 보고 분석을 해봄.
벡터화된 단어들의 분포를 살펴보았을 때 지금 현대사회에서 일론머스크를 모르는 사람이 없기 때문에 elon 또는 elonmusk 와 비슷한 단어들을 중심부테 있고 msgive22 처럼 의미를 알 수 없는 단어들을 중심부로부터 멀리 떨어져있는 것을 보실 수가 있습니다.
ipython에서는 인터렉티브하게 3D맵핑된 좌표들을 볼 수가 없어서 쉘에서 python을 통해 해당 코드를 실행시켰습니다.
아래 링크를 통해 실행영상을 보실 수 있습니다.
이를 통해서 사람들이 믿기 쉽고 아무런 의심 없이 들어감을 통해 scam을 당하기 쉬운 도메인 네임들을 식별하고 분류하고 시각화해보았습니다. 이렇게 시각화 함으로써 앞으로 scam site들을 감시하거나 정찰할 때 어떤 뜻을 가지고 어떤 이름의 도메인 네임을 사용하는 사이트들을 crawling할 것인지에 대해 효과적으로 식별할 수 있을 것 같습니다.
스크립트에서 사용하는 도메인 네임이 파싱된 json파일
list_data.json
134.7KB
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from gensim.models import Word2Vec from sklearn.manifold import TSNE import mplcursors # 단어 리스트 #target = ['apple', 'banana', 'orange', 'grape', 'watermelon', 'pineapple'] import json def load_list_from_json(filename): with open(filename, 'r') as file: data = json.load(file) return data # JSON 파일에서 리스트 읽어오기 loaded_list = load_list_from_json('list_data.json') def remove_duplicates(lst): unique_lst = list(set(lst)) return unique_lst # 중복 제거 words = remove_duplicates(loaded_list) # Word2Vec 모델 학습 #words.append("apple") # for ele in target: # words.append(ele) sentences = [word.split() for word in words] model = Word2Vec(sentences, min_count=1) # 단어 벡터 가져오기 word_vectors = model.wv[words] # t-SNE를 사용하여 벡터 차원 축소 perplexity = len(word_vectors)-1 tsne = TSNE(n_components=3, random_state=42, perplexity=perplexity-10) #tsne = TSNE(n_components=3, random_state=42, perplexity=3) word_vectors_tsne = tsne.fit_transform(word_vectors) # 시각화 fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') scatter = ax.scatter(word_vectors_tsne[:, 0], word_vectors_tsne[:, 1], word_vectors_tsne[:, 2]) # if ele in target: # apple_idx = words.index(ele) # ax.scatter(word_vectors_tsne[apple_idx, 0], word_vectors_tsne[apple_idx, 1], word_vectors_tsne[apple_idx, 2], c='red',s=150) # 단어 레이블 표시 labels = [] for i, word in enumerate(words): # if word in target: # label = ax.text(word_vectors_tsne[i, 0], word_vectors_tsne[i, 1], word_vectors_tsne[i, 2], word, visible=True) # labels.append(label) # else: # label = ax.text(word_vectors_tsne[i, 0], word_vectors_tsne[i, 1], word_vectors_tsne[i, 2], word, visible=False) # labels.append(label) label = ax.text(word_vectors_tsne[i, 0], word_vectors_tsne[i, 1], word_vectors_tsne[i, 2], word, visible=False) labels.append(label) # 마우스 클릭 이벤트를 처리하는 함수 def handle_mouse_click(event): if event.inaxes == ax: cont, ind = scatter.contains(event) if cont: label = labels[ind["ind"][0]] label.set_zorder(11) # 눌린 라벨이 앞으로 나오도록 Z 순서 조정 label.set_visible(not label.get_visible()) plt.draw() # 마우스 클릭 이벤트 핸들러 연결 fig.canvas.mpl_connect("button_press_event", handle_mouse_click) # 그래프 보여주기 plt.show()
Python
복사

Location of IP

IP를 통해서 scam site는 주로 어디서 운영되고 주로 어느 나라 IP를 통해서 사용되고 있는지에 대한 정보를 알고 있는 것도 scam site단속에 있어서 중요한 정보가 될 것이라고 생각합니다.
주어진 IP정보들을 바탕으로 Criminal IP API를 사용하여 정보를 얻고 지도에 맵핑을 해보았습니다.
1.
csv파일에서 domain, ipaddress, detected_crypto_type추출
2.
ip에대한 정보를 CIP에 물어보고 위도와 경도를 얻음
3.
folium에서 제공하는 맵에 마커를 통해서 특정된 IP위치를 지도에 찍어봄.
4.
지도 찍힌 마커를 통해서 scam site에 사용된 IP위치와 특징 분석
CIP를 무료버전 API Key를 사용해서 모든 IP를 찍어보진 못 했지만 찍어본 결과 Scam Site에서 사용하는 IP는 중국이나 러시아쪽보다는 미국과 유럽쪽의 IP를 사용한다는 것을 알 수 있었습니다.

find the candidates country

captured time과 last active time을 통해서 언제부터 언제 기간동안 scam site가 성행했었는지는 논문이나 PPT에서도 잘 나타내주고 있습니다. 그래서 저는 last active time을 통해서 scam site를 운영하는 사람의 위치를 알 수 있지 않을까라는 생각을 했습니다.
last active time같은 time을 기록하여 마지막으로 사이트가 닫힌 시간을 기록한다는 가정을 했습니다. 일단 scam site를 닫는 것은 사이트운영자가 주간시간대에 닫았을거라는 가정을 했습니다. 그래서 사이트가 닫힌 시간/마지막 거래된 시간이 scam site의 운영자가 위치할 것이라고 예상되는 평균 활동시간대의 범위에 속한다면은 운영자는 어느 위치쯤에서 활동하고 있을지 나라정도는 대략 파악할 수 있을거라고 생각합니다.
그래서 이 정보를 바탕으로 임의의 시간대를 주어 지도에서 후보군이 나라를 리스팅해보았습니다.

결론 및 느낀점

→ 논문을 읽으면서 데이터셋을 뽑은 방식이 신기한 방법을 통해서 뽑아서 신기했다.
데이터셋을 단지 5가지여가지 항목의 데이터를 이용해 자료들을 시각화해서 scam site들의 패턴을 분석해낸 점에서 몇가지 데이터만을 통해서도 잘 시각화하고 분석한다면 새로운 정보들을 얻을 수 있다는 것을 알았다.
해킹을 공부할 때도 데이터 pandas/matplolib 등 다양한 데이터를 처리하고 2차적으로 가공하는 법에 대해서도 공부를 하면 좋다는 것을 알았습니다.
또한 Criminal IP가 1년전에 beta버전으로 나온 것으로 알고 있는데 그 때보다 생각보다 규모가 커졌고 사용하는 사람들이 많아져서 놀랐다.

참고 자료 및 참고 문헌