악성 코드 자위를위한 작은 스크립트

18137 단어 보안파이썬보안
여러분, 재택 워크 만세인 나날을 보내시겠습니까?
지난주는 오랜만에 현장으로 뛰어 들었지만,
기차 안은 코로나 굿은 거짓말처럼 보였습니다.

코로나는 ...

보안 수요 증가



그건 그렇고, 집이 늘어난 요즘에는 단말기 보안에 대해
생각하는 것도 늘어난 것이 아닐까 생각합니다.

최근이라면 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 파일의 취급으로 조금 길어졌지만,
움직임은 다음과 같습니다.
  • CSV 파일 회전
  • 최신 CSV와 1세대 전의 CSV 파일의 내용을 비교
  • 차이가있는 경우 로그에 쓰기 + 팝 알림

  • 실행 부분


    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")
    

    이상입니다.

    조금이라도 재택 워크를 안전한 것으로 해,
    대중화되기를 기도하고 ...

    좋은 웹페이지 즐겨찾기