악성 코드 자위를위한 작은 스크립트
지난주는 오랜만에 현장으로 뛰어 들었지만,
기차 안은 코로나 굿은 거짓말처럼 보였습니다.
코로나는 ...
보안 수요 증가
그건 그렇고, 집이 늘어난 요즘에는 단말기 보안에 대해
생각하는 것도 늘어난 것이 아닐까 생각합니다.
최근이라면 EMOTET 등과 같은 맬웨어 등의 뉴스를보고
무섭다고 경계심이 일시적으로 높아지기도 할까라고 생각합니다.
하지만 일시가 서면 그런 경계심도 희미해져, 이상한 사이트에 액세스해 버리거나,
행사의 사이트에 이상한 것을 묻을 가능성도
없어도 없이.
그런 악성코드가 우리 기기에서 나쁜 짓을 하려면
자동 시작 등록이 필요합니다.
그래서 매일 자동으로 시작되는 프로그램을 확인하여,
집에 들어오는 수상한 배를 눈치채는 계기가 되면…
그래서 "autorunsc.exe"라는 편리한 도구를 사용하여,
자동 기동 프로그램시를 로그 수집하는 스크립트를 써 보았습니다.
import 부분
import subprocess
import zipfile
import os
import sys
import urllib.request as req
import pandas as pd
from glob import glob
from plyer import notification
from alittleuseful import loglotate
# pip install pandas
# pip install plyer
# pip install git+https://github.com/ardnico/main
alittleuseful은 내가 개인적으로 github에 공개하고 있습니다.
로그를 쓰는 라이브러리입니다.
그 외에도 이상한 기능을 공개하고 있습니다만, 좋으면 사용해 주면
기쁠까. . .
명명 정의
csv_file = f'{os.getcwd()}\\out.csv'
rcsv_file = f'{os.getcwd()}\\out_old.csv'
enc = "utf-16"
URL = "https://download.sysinternals.com/files/Autoruns.zip"
zip_file = "A.zip"
path='.'
logger = loglotate(
logname = "StartUpSec",
outputdir = [os.getcwd()],
lsize = 100000,
num = 20,
timestanp = 1 # 1:on other:off
)
정적 명명 및 함수 호출 부분입니다.
함수: autorunsc.exe 다운로드
def download_tool(tf:bool):
# file download
if tf == False:
logger.write('[INFO]Because the tool has not existed, the one will download')
req.urlretrieve(URL,zip_file)
with zipfile.ZipFile(zip_file, 'r') as z_file:
try:
z_file.extractall(path=path)
logger.write("[SUCCESS]Tool download succeeded")
except Exception as e:
logger.write('[ERROR]Failed to download or unzip autorunsc.exe')
logger.write(f'[ERROR]{e}')
sys.exit(0)
autorunsc.exe가 없으면 request를 사용하여
도구를 다운로드합니다.
다운로드가 ZIP 해동까지 실시합니다.
함수: 'autorunsc.exe' 실행부터 자동 시작 프로그램 비교까지
def get_log():
if os.path.exists(rcsv_file) == True:
try:
os.remove(rcsv_file)
except Exception as e:
logger.write('[ERROR]Failed to remove oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
if os.path.exists(csv_file) == True:
try:
os.rename(csv_file,rcsv_file)
df_old = pd.read_csv(rcsv_file,encoding=enc)
except Exception as e:
logger.write('[ERROR]Failed to rename oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
else:
df_old = ''
with open(csv_file, mode='w', encoding=enc) as fp:
cp = subprocess.run([f'{os.getcwd()}\\autorunsc.exe','-nobanner','-c','-a','*'], encoding=enc, stdout=fp)
try:
if df_old == '':
flag = 0
else:
flag = 2
except:
if len(df_old.index) <= 0:
flag = 0
else:
flag = 1
if flag==0 or flag==2:
logger.write("[INFO]StartUp Program's log has created")
else:
with open(csv_file,encoding=enc) as f:
data = f.read().split('\n')
with open(rcsv_file,encoding=enc) as f:
data2 = f.read().split('\n')
l_diff = list(set(data)^set(data2))
if len(l_diff) > 0:
logger.write("[DIFF INFO]The difference of the startup program has existed")
for i in l_diff:
logger.write(f"[DIFF]{i}")
notification.notify(
title='The difference of startup program has existed',
message=i,
app_name='Diff notify'
)
else:
logger.write("[INFO]The difference did not exsist")
CSV 파일의 취급으로 조금 길어졌지만,
움직임은 다음과 같습니다.
import subprocess
import zipfile
import os
import sys
import urllib.request as req
import pandas as pd
from glob import glob
from plyer import notification
from alittleuseful import loglotate
# pip install pandas
# pip install plyer
# pip install git+https://github.com/ardnico/main
alittleuseful은 내가 개인적으로 github에 공개하고 있습니다.
로그를 쓰는 라이브러리입니다.
그 외에도 이상한 기능을 공개하고 있습니다만, 좋으면 사용해 주면
기쁠까. . .
명명 정의
csv_file = f'{os.getcwd()}\\out.csv'
rcsv_file = f'{os.getcwd()}\\out_old.csv'
enc = "utf-16"
URL = "https://download.sysinternals.com/files/Autoruns.zip"
zip_file = "A.zip"
path='.'
logger = loglotate(
logname = "StartUpSec",
outputdir = [os.getcwd()],
lsize = 100000,
num = 20,
timestanp = 1 # 1:on other:off
)
정적 명명 및 함수 호출 부분입니다.
함수: autorunsc.exe 다운로드
def download_tool(tf:bool):
# file download
if tf == False:
logger.write('[INFO]Because the tool has not existed, the one will download')
req.urlretrieve(URL,zip_file)
with zipfile.ZipFile(zip_file, 'r') as z_file:
try:
z_file.extractall(path=path)
logger.write("[SUCCESS]Tool download succeeded")
except Exception as e:
logger.write('[ERROR]Failed to download or unzip autorunsc.exe')
logger.write(f'[ERROR]{e}')
sys.exit(0)
autorunsc.exe가 없으면 request를 사용하여
도구를 다운로드합니다.
다운로드가 ZIP 해동까지 실시합니다.
함수: 'autorunsc.exe' 실행부터 자동 시작 프로그램 비교까지
def get_log():
if os.path.exists(rcsv_file) == True:
try:
os.remove(rcsv_file)
except Exception as e:
logger.write('[ERROR]Failed to remove oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
if os.path.exists(csv_file) == True:
try:
os.rename(csv_file,rcsv_file)
df_old = pd.read_csv(rcsv_file,encoding=enc)
except Exception as e:
logger.write('[ERROR]Failed to rename oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
else:
df_old = ''
with open(csv_file, mode='w', encoding=enc) as fp:
cp = subprocess.run([f'{os.getcwd()}\\autorunsc.exe','-nobanner','-c','-a','*'], encoding=enc, stdout=fp)
try:
if df_old == '':
flag = 0
else:
flag = 2
except:
if len(df_old.index) <= 0:
flag = 0
else:
flag = 1
if flag==0 or flag==2:
logger.write("[INFO]StartUp Program's log has created")
else:
with open(csv_file,encoding=enc) as f:
data = f.read().split('\n')
with open(rcsv_file,encoding=enc) as f:
data2 = f.read().split('\n')
l_diff = list(set(data)^set(data2))
if len(l_diff) > 0:
logger.write("[DIFF INFO]The difference of the startup program has existed")
for i in l_diff:
logger.write(f"[DIFF]{i}")
notification.notify(
title='The difference of startup program has existed',
message=i,
app_name='Diff notify'
)
else:
logger.write("[INFO]The difference did not exsist")
CSV 파일의 취급으로 조금 길어졌지만,
움직임은 다음과 같습니다.
csv_file = f'{os.getcwd()}\\out.csv'
rcsv_file = f'{os.getcwd()}\\out_old.csv'
enc = "utf-16"
URL = "https://download.sysinternals.com/files/Autoruns.zip"
zip_file = "A.zip"
path='.'
logger = loglotate(
logname = "StartUpSec",
outputdir = [os.getcwd()],
lsize = 100000,
num = 20,
timestanp = 1 # 1:on other:off
)
def download_tool(tf:bool):
# file download
if tf == False:
logger.write('[INFO]Because the tool has not existed, the one will download')
req.urlretrieve(URL,zip_file)
with zipfile.ZipFile(zip_file, 'r') as z_file:
try:
z_file.extractall(path=path)
logger.write("[SUCCESS]Tool download succeeded")
except Exception as e:
logger.write('[ERROR]Failed to download or unzip autorunsc.exe')
logger.write(f'[ERROR]{e}')
sys.exit(0)
autorunsc.exe가 없으면 request를 사용하여
도구를 다운로드합니다.
다운로드가 ZIP 해동까지 실시합니다.
함수: 'autorunsc.exe' 실행부터 자동 시작 프로그램 비교까지
def get_log():
if os.path.exists(rcsv_file) == True:
try:
os.remove(rcsv_file)
except Exception as e:
logger.write('[ERROR]Failed to remove oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
if os.path.exists(csv_file) == True:
try:
os.rename(csv_file,rcsv_file)
df_old = pd.read_csv(rcsv_file,encoding=enc)
except Exception as e:
logger.write('[ERROR]Failed to rename oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
else:
df_old = ''
with open(csv_file, mode='w', encoding=enc) as fp:
cp = subprocess.run([f'{os.getcwd()}\\autorunsc.exe','-nobanner','-c','-a','*'], encoding=enc, stdout=fp)
try:
if df_old == '':
flag = 0
else:
flag = 2
except:
if len(df_old.index) <= 0:
flag = 0
else:
flag = 1
if flag==0 or flag==2:
logger.write("[INFO]StartUp Program's log has created")
else:
with open(csv_file,encoding=enc) as f:
data = f.read().split('\n')
with open(rcsv_file,encoding=enc) as f:
data2 = f.read().split('\n')
l_diff = list(set(data)^set(data2))
if len(l_diff) > 0:
logger.write("[DIFF INFO]The difference of the startup program has existed")
for i in l_diff:
logger.write(f"[DIFF]{i}")
notification.notify(
title='The difference of startup program has existed',
message=i,
app_name='Diff notify'
)
else:
logger.write("[INFO]The difference did not exsist")
CSV 파일의 취급으로 조금 길어졌지만,
움직임은 다음과 같습니다.
def get_log():
if os.path.exists(rcsv_file) == True:
try:
os.remove(rcsv_file)
except Exception as e:
logger.write('[ERROR]Failed to remove oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
if os.path.exists(csv_file) == True:
try:
os.rename(csv_file,rcsv_file)
df_old = pd.read_csv(rcsv_file,encoding=enc)
except Exception as e:
logger.write('[ERROR]Failed to rename oldcsvfile')
logger.write(f'[ERROR]{e}')
sys.exit(0)
else:
df_old = ''
with open(csv_file, mode='w', encoding=enc) as fp:
cp = subprocess.run([f'{os.getcwd()}\\autorunsc.exe','-nobanner','-c','-a','*'], encoding=enc, stdout=fp)
try:
if df_old == '':
flag = 0
else:
flag = 2
except:
if len(df_old.index) <= 0:
flag = 0
else:
flag = 1
if flag==0 or flag==2:
logger.write("[INFO]StartUp Program's log has created")
else:
with open(csv_file,encoding=enc) as f:
data = f.read().split('\n')
with open(rcsv_file,encoding=enc) as f:
data2 = f.read().split('\n')
l_diff = list(set(data)^set(data2))
if len(l_diff) > 0:
logger.write("[DIFF INFO]The difference of the startup program has existed")
for i in l_diff:
logger.write(f"[DIFF]{i}")
notification.notify(
title='The difference of startup program has existed',
message=i,
app_name='Diff notify'
)
else:
logger.write("[INFO]The difference did not exsist")
실행 부분
if __name__ == "__main__":
os.chdir(r"C:\python\notebooks\StartUpProgramSec")
tooltf = os.path.exists(f"{os.getcwd()}\\autorunsc.exe")
download_tool(tooltf)
get_log()
logger.write("[INFO]The process completed")
이상입니다.
조금이라도 재택 워크를 안전한 것으로 해,
대중화되기를 기도하고 ...
Reference
이 문제에 관하여(악성 코드 자위를위한 작은 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nico4316/items/72e1cd5e6c1d017fcde0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
if __name__ == "__main__":
os.chdir(r"C:\python\notebooks\StartUpProgramSec")
tooltf = os.path.exists(f"{os.getcwd()}\\autorunsc.exe")
download_tool(tooltf)
get_log()
logger.write("[INFO]The process completed")
Reference
이 문제에 관하여(악성 코드 자위를위한 작은 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nico4316/items/72e1cd5e6c1d017fcde0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)