본문 바로가기

study

리눅스 + Python 도구 활용 + 명령어 정리

1) 파일 유형 식별

 

사용법 : file <filename>

PE32 : 32비트 실행 파일

PE32+ : 64비트 실행 파일 

 

 

import magic
m = magic.open(magic.MAGIC_NONE)
m.load()
ftype = m.file(r'sample32.exe')
print(ftype)

 

파이썬으로 magic 모듈을 이용한 파일 유형 식별

 

2) 파일 해시 계산

 

 

사용법 : md5sum <filename> , sha256sum <filename> , sha1sum <filename> 

* 와일드카드로 전체 스캔 가능

 

 

 

import hashlib
content = open(r"sample32.exe","rb").read()
print(hashlib.md5(content).hexdigest())
print(hashlib.sha256(content).hexdigest())
print(hashlib.sha1(content).hexdigest())

 

파이썬으로 hashlib 모듈을 이용한 파일 해시 추출

 

3) 파일 문자열 추출

 

 

사용법 : strings <option> <filename>

최소 4문자 이상인 ASCII 문자열을 추출한다.

 

strings -a :  전체 파일에서 문자열 추출

strings -el : 유니코드 문자열 추출

 

 

 

사용법 : floss <filename>

난독화된 문자열을 자동으로 식별하고 추출하는 도구

 

 

 

4) 퍼지 해시 (파일 유사도 비교)

 

사용법 : ssdeep [-m file] [-k file] [-dpgvrsblcxa] [-t val] [-h|-V] [FILES]

 

퍼지 해싱 도구, 파일 유사도를 비교하는 데 사용됨 ,

동일한 악성코드군 또는 동일한 공격자 그룹에 속하는 샘플을 식별하는데 도움 됨

-p (상세 일치 모드) , -r (재귀 모드)

 

-m - FILES를 파일의 알려진 해시와 일치시킵니다.
-k - FILES의 서명을 파일의 서명과 일치시킵니다.
-d - 디렉터리 모드, 디렉터리의 모든 파일을 비교합니다.
-p - 일반 일치 모드. -d와 유사하지만 모든 일치 항목을 포함합니다.
-g - 일치 항목을 클러스터링 합니다.
-v - 자세한 모드. 처리 중인 파일 이름을 표시합니다.
-r - 재귀 모드
-s - 자동 모드. 모든 오류는 표시되지 않습니다.
-b - 파일의 이름만 사용하고 모든 경로 정보는 생략합니다.
-l - 파일 이름에 상대 경로를 사용합니다.
-c - CSV 형식으로 출력을 출력합니다.
-x - FILES를 서명 파일로 비교합니다.
-a - 점수에 관계없이 모든 일치 항목을 표시합니다.
-t - 지정된 임계값을 초과하는 일치 항목만 표시합니다.
-h - 이 도움말 메시지를 표시합니다.
-V - 버전 번호를 표시하고 종료합니다.

 

 

-r 옵션으로 샘플을 포함된 하위 디렉터리에서 ssdeep 실행 가능

 

 

응용하여 새 파일과 이전 분석한 샘플의 해시를 비교할 수 있음

 

 

import ssdeep
hash1 = ssdeep.hash_from_file('sample32.exe')
print (hash1)
hash2 = ssdeep.hash_from_file('MessageBox32.exe')
ssdeep.compare(hash1,hash2)

 

파이썬으로 ssdeep 모듈을 이용한 유사성 비교

 

import pefile
pe = pefile.PE("sample32.exe")
print (pe.get_imphash())

 

파이썬으로 pefile 모듈을 이용한 imphash 추출

imphash : (라이브러리/임포트 함수(API 명) 특유의 순서를 바탕으로 해시 값을 계산

 

 

import pefile
pe = pefile.PE("sample32.exe")
for section in pe.sections:
	print ("%s\t%s" % (section.Name, section.get_hash_md5()))

 

파이썬으로 pefile 모듈을 이용한 sectionhash 추출

 

 

5) 바이러스 토탈 조회

import requests
import sys

API_KEY = "<API_KEY>"

def check_virustotal(file_hash):
    url = f"https://www.virustotal.com/api/v3/files/{file_hash}"
    headers = {
        "accept": "application/json",
        "x-apikey": API_KEY
    }

    response = requests.get(url, headers=headers)

    # Sample not found
    if response.status_code == 404:
        print("[!] The sample does not exist on VirusTotal.")
        return

    data = response.json()

    try:
        stats = data["data"]["attributes"]["last_analysis_stats"]
        results = data["data"]["attributes"]["last_analysis_results"]

        print("\n===== Detection Summary =====")
        print(f"Malicious: {stats['malicious']}")
        print(f"Suspicious: {stats['suspicious']}")
        print(f"Undetected: {stats['undetected']}")
        print("=============================\n")

        print("===== Engine Detection Details =====")
        for engine, result in results.items():
            category = result.get("category", "unknown")
            if category != "undetected":
                print(f"{engine}: {category} ({result.get('result', 'N/A')})")
    except KeyError:
        print("[!] No analysis data is available.")


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print(f"usage: python {sys.argv[0]} <file_hash>")
        sys.exit(1)

    file_hash = sys.argv[1]
    check_virustotal(file_hash)

 

 

 

자주 사용하는 리눅스 명령어 정리

OS 정보 확인 uname -a > 커널/OS 정보
cat /etc/os-release > 환경 확인
dpkg -l / rpm -qa > 설치 패키지 확인
env / printenv > 환경 변수 확인
파일 바이트 단위 비교 cmp -l file1 file2
윈도우) fc /b file1 file2
파일 찾기 find /home/unknown/ -name backdoor > unknown 디렉토리에서 backdoor 이라는 파일 명을 가진 파일 찾기
find ~ backdoor.c > 사용자 홈 디렉터리(~) 내에서 파일 검색
폴더 용량 확인 du -sh * > 큰 파일 탐지, 데이터 탈취 흔적
디렉터리 구조 트리 출력 tree
보호기법 검사 ./checksec.sh --file file1
내용 실시간 표시 tail -f file1
시스템 로그 dmesg > 커널 메세지
journalctl -xe > 시스템 로그
텍스트 비교 diff file1 file2
해시 sha256sum file1
md5sum file1
문자열 strings -a file1
파일 포맷 file file1
헥스 덤프 hexdump -C file1 > file을 hex 덤프+ ASCII로 출력
xxd file | less > file을 hex 덤프로 출력
xxd -r hex.txt > original.bin > hex 덤프(hex.txt)를 다시 원래 바이너리로 복원
실행파일 분석 objdump -d file1 > ELF/PE 실행 파일 디스어셈블
objdump -h file1 > 섹션 확인
readelf -a file1 > elf 구조
테이블 확인 nm file1 > 심볼 테이블
ldd file1 > 의존 라이브러리
패킹/난독화 탐지 binwalk file1 > 압축/내장 파일 탐지
upx -d file1 > upx 언패킹
동적/백그라운드 strace ./file1 > 시스템 콜 추척
ltrace ./file1 > 라이브러리 호출 추적
jobs > 백그라운드 프로세스 확인
프로세스/네트워크 ps aux > 프로세스 확인
ps -ef  > 프로세스 확인
pmap > 프로세스 메모리 맵
top / htop > 실시간 CPU/메모리 사용

netstat -anp > 네트워크 연결 확인
ss -nltp / -nltu > 리스닝 포트 출력
ss -antp > 연결된 세션 출력
HTTP 요청 curl -v <URL> 요청 테스트
wget <URL> 파일 다운로드
dig <Domain> DNS 정보 조회
nslookup <Domain> DNS 확인
네트워크 캡처 tcpdump -i eth0 > 패킷 캡처
권한/이상행위 확인 chmod +x file1 > 파일에 실행 권한 추가
stat file1 > 메타데이터 분석

 

 

 

자주 사용하는 윈도우 명령어 정리

파일/디렉터리 탐색 dir > 현재 디렉터리 파일/폴더 목록                    
tree /f > 디렉터리 트리                 
attrib > 파일 속성 확인  
icacls <파일>  > 파일 권한 확인                   
fsutil > 파일 시스템 정보 확인 
comp <파일1> <파일2> 파일 비교    
프로세스 및 메모리 tasklist > 실행 중 프로세스 확인          
tasklist /svc > 서비스 포함 프로세스 확인   
taskkill /PID <PID>  프로세스 종료
wmic process list full > 프로세스 상세 정보                     
네트워크 netstat -ano > 포트별 프로세스 연결 확인  
netsh advfirewall show allprofiles > 방화벽 설정 확인 
ipconfig /all > 네트워크 인터페이스 정보 확인  
ping <IP> 연결 테스트 
tracert <IP> 경로 추적    
nslookup <Domain> DNS 확인    
시스템 정보 확인 set > 환경변수 출력  
systeminfo > OS, 패치, 메모리 등 확인  환경
whoami > 현재 사용자 확인       
whoami /priv > 현재 권한 세부 확인       
wmic os get /format:list  > OS 정보 상세 확인 
ver > Windows 버전 확인   
PowerShell Get-Process > 프로세스 확인
Get-Service > 서비스 확인
Get-Command > 시스템 명령 확인          
Get-Content <파일> 파일 내용 읽기              
Invoke-WebRequest > HTTP 요청     
Invoke-Expression > 코드 실행