반응형
Conti 유저들의 대화를 분석하고 IoC정보를 자동으로 VT에 연동하는 API를 제작한다.
* "conti"는 러시아 기반의 랜섬웨어 공격 그룹 중 하나로 아래 깃허브에서 대화내용을 영어로 해석하여 제공해 주고 있다.
그 중 2020년~2022년 데이터 셋을 이용하여 정제하고, VT API를 연동해보고자 했다.
2020년:'https://github.com/NorthwaveSecurity/complete_translation_leaked_chats_conti_ransomware/blob/main/jabber_chat_2020_translated.csv?raw=true'
2021-2022년 : 'https://github.com/NorthwaveSecurity/complete_translation_leaked_chats_conti_ransomware/blob/main/jabber_chat_2021_2022_translated.csv?raw=true'
1. 먼저 파이썬을 통해 데이터셋을 불러오고 IoC 추출도구를 import하여 IoC정보를 파싱한다.
*IoC(Indicator Of Compromise) 침해지표 디지털 침해사고를 분석하는데 사용되는 지표
2. 이 중 Ipv4정보가 유효할 것이라고 판단하여 Ipv정보만 파싱 하였다.
ioc_ipv4 =ioc_df[ioc_df["IoCType"].str.contains("ipv4")==True]
3. VT 회원가입 이후 API Key를 확인한다.
무료 계정은 500회 호출 까지 무료로 사용가능하다.
4. Test API를 Code 작성
IP값을 조회하는 방식으로 선택하였다.
API DOCs : https://docs.virustotal.com/reference/ip-info
https://www.virustotal.com/api/v3/ip_addresses/{ip}
import requests
api_key = ''
# 본인의 VirusTotal API 키
ip = '54.89.230.95' # 변수로 받아오고자 하는 IP 주소
# Malicious IP
url = f'https://www.virustotal.com/api/v3/ip_addresses/{ip}'
headers = {
'x-apikey': api_key,
}
response = requests.get(url, headers=headers)
if response.status_code == 200: # 요청이 성공적으로 처리된 경우
data = response.json()
print(data)
else:
print(f"Error {response.status_code}: {response.text}")
코드 실행 시 JSON정제 되지 않아 상당히 많은 정보들을 얻을 수 있는데 요청이 성공한 경우, 해당 IP가 악성 주소인지 아닌지만 판별하기 위한 정보만 정제해서 출력하도록 변경한다.
if response.status_code == 200: # 요청이 성공적으로 처리된 경우
data = response.json()
last_analysis_results = data['data']['attributes']['last_analysis_results']
malicious_results = [engine_result['result'] for engine_result in last_analysis_results.values() if engine_result['category'] == 'malicious']
clean_results = [engine_result['result'] for engine_result in last_analysis_results.values() if engine_result['category'] == 'clean']
print( malicious_results)
print( clean_results)
else:
print(f"Error {response.status_code}: {response.text}")
5. IoC Ipv4 Dataframe에서 순차적으로 IP를 검사하도록 수정
간단하게 Conti Data set에서 malicious 한 ip를 자동으로 VT에서 검색하는 출력하는 코드가 완성되었다.
# Index 로드 문제가 있어 CSV Load로 정제
ipv4= pd.DataFrame(ioc_ipv4)
# CSV 파일로 저장
ipv4.to_csv('data.csv', index=False)
# CSV 파일에서 데이터 로드 (인덱스를 제외하고 로드)
ipv4 = pd.read_csv('data.csv', index_col=False)
print(ipv4)
import requests
def get_ip_analysis(api_key, ip):
url = f'https://www.virustotal.com/api/v3/ip_addresses/{ip}'
headers = {
'x-apikey': api_key,
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
last_analysis_results = data['data']['attributes']['last_analysis_results']
malicious_results = [engine_result['result'] for engine_result in last_analysis_results.values() if engine_result['category'] == 'malicious']
print(ip,': ',malicious_results)
else:
print(f"Error {response.status_code}: {response.text}")
if __name__ == '__main__':
api_key = '' # 본인의 VirusTotal API 키
start_ip_range = 0 # 시작 IP
end_ip_range = 5 # 종료 IP
for i in range(start_ip_range, end_ip_range):
ip = ipv4['Observable'][i]
get_ip_analysis(api_key, ip)
반응형
'정보보안 > 정보보안 실습' 카테고리의 다른 글
[Linux/Ubuntu22.04] iptables ICMP Flooding 룰 정책 (0) | 2023.07.19 |
---|---|
[Linux/Ubuntu22.03] wireshark 다운로드 및 실행 (0) | 2023.07.18 |
[Linux/Ubuntu22.03] Hping3 다운로드 (0) | 2023.07.17 |
[정보보안] SSRF Reflected XSS 실습 (0) | 2023.06.26 |
[정보보안] SSRF Stored XSS 실습 (0) | 2023.06.26 |