반응형

파이썬 프로그램은 대표적으로 두 가지 모드가 있다. 하나는 대화식 모드(Interactive Mode)이고 또 하나는 모듈 파일(Module File)혹은 스크립트 파일(Script File) 형식이다.

대화식 모드란 명령 하나를 입력하고 그 결과를 받는, 대화를 주고 받는 방식으로 작업을 진행해 가는 것이고, 스크립트 파일 형식이란, 텍스트 파일 안에 프로그램을 작성해 놓고 그것을 한꺼번에 실행하는 것이다. 스크립트 파일을 실행하면 프로그램이 종료될 때까지 실행을 멈추지 않는다.


1. 대화식 모드로 실행하기

대화식 모드로 실행하기(윈도우)

시작 →  모든 프로그램  → python2.7 → IDLE(python GUI) 를 클릭하면 다음과 같은 화면을 만나볼 수 있다.



이렇게 >>> 표시에 예를 들어 4+5를 입력하고 엔터를 치면 9라는 결과 값이 바로 출력이된다.

print ‘Hello World!’ 라고 입력을 하면 Hello World! 라고 출력이 된다.

이렇게 사용자와 파이썬이 대화를 하듯이 진행하는 모드를 대화형 모드라고 할 수 있다.



대화식 모드로 실행하기(유닉스/리눅스)

리눅스에서는 terminal 창을 열어 python이라고 입력을 하면 위에 윈도우와 동일하게 대화식 모드로 진입이 가능하다.



파이썬 인터프리터는 하나의 명령을 받고 그 결과를 돌려준다. 명령을 입력받을 준비가 되어있다는 것을 나타내기 위해 사용되는 문자열(>>>)을 프롬프트(Prompt)라고 한다.


** 참고사항 : 명령의 입력은 언제나 첫 컬럼부터 해야 한다. 그렇지 않으면 에러가 발생한다. 파이썬은 들여쓰기에 매우 민감한 언어이다.




2. 산술 연산하기

우리가 가장 편하게 사용하고, 컴퓨터가 가장 잘 할 수 있는 일이 바로 계산일 것이다. 파이썬을 수행시키고 다음과 같은 산술 명령을 해본다. 파이썬을 계산기로 사용해 보자.



우리가 잘 아는 사칙 연산을 수행하였다. 위에서 한 가지 이상하게 생각할 수 있는 점이 있다면 왜 9/5가 1이냐는 것인데, 한 가지 규칙만 알면 결과를 이해할 수 있다. ‘정수/정수’ 의 결과는 ‘정수’이다. 대부분의 컴퓨터 언어에서 ‘정수/정수’는 몫을 의미한다. 즉, 연산 결과의 소수점 이하를 버리는 것으로 이해할 수 있다.



3. 문자열 연산하기

문자열(String)은 단일 인용부호(‘) 혹은 이중 인용부호(“)로 묶인 문자의 열이다.

예를 들면 ‘adc’ “def” 등이다. 문자열을 출력하는 것은 print 문을 이용한다.



4. 종료하기

종료하는 방법은 윈도우 IDLE이나 리눅스에서는 ^D(Ctrl+D) 키를 누르거나, 도스 창에서는 ^Z를 입력하면 된다.


또 다른 방법은 sys.exit()를 이용하는 것이다.

>>> import sys

>>> sys.exit()


혹은 SystemExit 예외를 발생시키는 방법이 있다.

>>> raise SystemExit


5. 파이썬 버전 알아보기

코드 실행 중에 파이썬 버전을 알아보려면 sys 모듈의 version 혹은 version_info를 사용한다.


반응형
반응형

유닉스 & 리눅스 파일시스템 종류

유닉스의 파일시스템에서 슈퍼블럭(Superblock)은 디스크의 크기와 같은 파일시스템에 관한 일반적인 정보를 저장하는 곳을 말한다. 이곳의 정확한 정보는 파일시스템에 영향을 미친다.

아이노드(Inode)는 파일 이름을 제외한 파일에 관한 모든 정보를 저장하는 곳을 말한다.


1. EXT2 파일시스템 : 리눅스를 위한 확장성있고 강력한 파일시스템으로 ext의 상위버전으로

파일에 들어 있는 데이터의 데이터 블록에 저장되며 데이터 블록의 크기는 같고 ext2 파일시스템의 크기는 mke2fs 명령을 통하여 파일시스템이 만들어질 때 결정된다.


<ext2 파일시스템의 특징>

* 파일시스템의 모든 정보를 슈퍼블럭과 Group Descriptor Table에 저장한다.


* ext2는 Boot Sector와 Block Group으로 구성되며 Block Group은 파일시스템 손상시 데이터를 복원한다.


* Block은 윈도우 클러스터와 같은 개념으로 1k-4k로 설정이 가능하며 파일시스템 생성시 그 크기를 정할 수 있다.


파일시스템이 효율과 퍼포먼스에 중점을 두고 디자인된 파일시스템으로 예기치 않은 시스템 상의 재난으로부터 FSCK(File System Check)라는 파일시스템 복구 기능을 제공한다.


2. EXT3 파일시스템 : 데이터의 신뢰성이 강화되었고 사용자가 직접 데이터 보호 유형과 수준을 결정할 수 있는 파일시스템을 말한다. 특히 저널링(Journaling) 기술은 데이터를 디스크에 쓰기 전에 로그에 데이터를 남겨 시스템의 비정상적인 셧다운에도 로그를 사용해 FSCK 보다 빠르고 안정적인 복구기능을 제공하는 기술이다.


2. EXT4 파일시스템 : 리눅스의 저널링 파일시스템 중 하나로 ext3 파일시스템의 향상된 버전이다.

<ext4 파일시스템의 특징>

* 대형 파일 시스템 : 최대 1엑사바이트의 볼륨과 최대 16테라바이트의 파일을 지원한다. 현재 e2fsprogs는 16테라바이트의 파일 시스템만 다룰 수 있지만, 보다 큰 드라이브를 지원하기 위한 개발이 진행 중이다.


* Extent : Extent는 ext2와 ext3에 쓰이던 전통적인 블록 매핑(Block mapping) 방식을 대체하기 위한 것이다. Extent는 인접한 물리적 블록의 묶음으로, 대용량 파일 접근 성능을 향상시키고 단편화를 줄인다.


* 하위 호환성 : ext3와 ext2에 대한 하위 호환성이 있어서 ext3와 ext2 파일 시스템을 ext4로 마운트 하는 것이 가능하다. 이는 성능을 조금 향상시킬 수 있는데, ext4의 새 기능 중 새로운 블록 할당 알고리즘 같은 것은 ext3와 ext2에서도 사용될 수 있기 때문이다. ext3는 ext4 파일 시스템을 마운트할 수 있는 ext4에 대한 부분적인 상위 호환성이 있지만 ext4 파티션이 ext4의 중요한 새 특징인 Extents를 사용한다면,  ext3로 마운트는 불가능하다.


* 지연된 할당 : ext는 지연된 할당이라고도 알려진, allocate-on-flush 라는 파일 시스템 성능 기술을 사용한다. 이는 데이터가 디스크에 쓰여지기도 전에 블록을 할당하는 다른 파일 시스템과는 다르게 데이터가 디스크에 쓰여지기 전까지 블록 할당을 지연시킨다.

따라서 실제 파일 크기에 기반하여 블록 할당을 결정함으로 인해 향상된 블록 할당이 가능하게 되어 하나의 파일에 대한 블록이 여러 곳으로 분산되는 현상을 막는다.

이는 다시 디스크 이동을 최소화 시킴으로써 성능을 향상 시킨다.


* 32,000개의 하위 디렉터리 제한 없음 : ext3에서 하위 디렉터리의 수는 32,000개로 제한되어 있다. 이 제한은 ext4에서 64,000개로 늘어났으며 ‘dir_nlink’기능은 이보다 더 큰 개수도 허용한다.


EXT2,3,4 파일시스템의 장단점


구분

EXT2

EXT3

EXT4

장점

* 시스템이 손상될 경우 FSCK 기능을 이용 복구 가능


* 다른 리눅스 파일시스템 대비 비교적 간단 명료함

* 사용자가 직접 데이터 보호 유형과 수준 결정 가능


* EXT2에 비해 빠른 속도의 작업 가능


* 저널링 기능을 사용해 더 빠르고, 안정적인 복구 가능


* 자동 압축 및 안정성


* 향상된 파일 이름 저장 및 길이 지원

* ext3 보다 더욱 큰 용량을 지원


* 대용량 파일 접근 성능을 강화한 Extent 기능 제공


* ext2, ext3 파일시스템에 대한 하위 호환성이 있음


* 하위 디렉터리 수가 64,000개로 증가

단점

* /var 디렉토리와 같이 새로운 자료가 쌓이는 곳에 취약

* Jfs, ext4, XFs와 같이 extents 기능 지원 불가


* Checksum 검사하지 않음

* 지연된 할당과 데이터 유실 가능성




반응형

'운영체제(OS) > 리눅스(Linux)' 카테고리의 다른 글

칼리리눅스 한글 언어 설정 방법  (0) 2017.07.28
네임서버(DNS) 서버  (0) 2017.07.26
리눅스 스케쥴러 cron  (0) 2017.07.16
리눅스 원격파일 전송 명령어 scp  (0) 2017.07.14
리눅스 TCP Wrapper  (0) 2017.07.14
반응형

윈도우 파일시스템 종류


1. FAT(File Allocation Table) 파일시스템 : DOS 때부터 사용되고 있는 대표적인 파일시스템으로 하드디스크에 FAT라는 영역을 만들어 이 안에 하드디스크에 저장되어 있는 파일의 실제 위치 등의 정보를 기록해 두고 이를 이용하는 파일시스템을 말한다.

FAT16과 FAT32등이 있다.


2. NTFS(NT File System) 파일시스템 : MFT(Master File Table)를 사용하여 관리하며 Mirror와 파일로그가 유지되어 비상시 파일 복구가 가능하다. 윈도우 파일시스템의  FAT32 파일시스템 기능에 대용량 하드 디스크 지원, 보안기능, 압축기능, 원격저장소 기능 등을 추가하여 만든 윈도우 NT 전용 파일시스템을 말한다. 클러스터의 개수는 2^64개로 FAT32보다 많다.


NTFS 파일시스템의 특징

* NTFS는 기본 NTFS 보안의 공유 보안과 동일하게 Everyone 그룹에 대해서는 모든 권한이 ‘허용’이다.


* 기본 NTFS 보안을 변경하면 사용자마다 서로 다른 NTFS 보안을 적용시킬 수 있다.


* 파일에 설정한 NTFS 보안이 폴더에 설정한 NTFS 보안보다 우선하기 때문에 강력한 보안을 설정할 수 있다.


* 특정 사용자가 생성한 폴더나 파일에 대해서는 생성한 사용자에게 소유자 권한이 있다.


* Windows 2000 server의 시스템 폴더에 대해서는 일반 사용자가 설정할 수 없다. 설정할 수 있는 사용자는 Administrators 그룹과 Power User 그룹만이 가능하다.


NTFS 파일시스템 주요기능

* 파일과 폴더에 대한 보안강화 및 접근 제어가 가능하다(파일과 폴더 보안).


* 압축 파일로 더 많은 저장 공간의 사용이 가능하다(디스크압축).


* 사용자별 디스크 사용 공간의 제어가 가능하다(디스크할당).


* 파일에 대한 암호화 지원이 가능하다(파일 암호화).


FAT & NTFS의 장단점


구분

FAT

NTFS

장점

* 호환성 우수

* 단순성

* 저용량 볼륨에 최적화


* 대용량 볼륨 지원

* 디스크 효율적 사용

* 강력한 보안 기능

* 자동 압축 및 안정성

* 향상된 파일 이름 저장 및 길이 지원

단점

* 보안에 취약

* 대용량 볼륨의 비효율적 이용

* 다른 운영체제에 호환 불가

* 저용량 볼륨에서 FAT 대비 속도가 느림



반응형
반응형

* SamIGetPrivateData

 보안 계정 관리자 데이터베이스에서 특정 사용자에 관한 개별 정보를 질의한다. 해시를 덤프하는 프로그램은 사용자의 로그인 패스워드 해시를 수집할 용도로 SAM 데이터베이스에 접근한다.


* SamQueryInfomationUse

 보안 계정 관리자 데이터베이스에서 특정 사용자에 관한 개별 정보를 질의한다. 해시를 덤프하는 프로그램은 사용자의 로그인 패스워드 해시를 수집할 용도로 SAM 데이터베이스에 접근한다.


* send

 원격 시스템에 데이터를 전송한다. 악성코드는 이 함수를 이용해 원격 명령 제어 서버로 데이터를 전송한다.


* SetFileTime

 파일의 생성, 접근, 최근 수정 시간을 변경한다. 악성코드는 종종 이 함수를 이용해 악의적인 행위를 숨기려 한다.


* SetThreadContext

 주어진 스레드 문맥을 수정할 때 사용한다. 일부 인젝션 기법은 SetThreadContext를 사용한다.


* SetWindowsHookEx

 특정 이벤트를 호출할 때 매번 호출하는 후킹 함수를 설정한다. 주로 키로거나 스파이웨어가 사용하며, 이 함수는 DLL을 시스템상의 모든 프로세스로 로드하는 쉬운 방법을 제공한다. 이 함수는 때로 컴파일러가 추가한다.


* SfcTerminateWatcherThread

 윈도우 파일 보호를 비활성화하고 보호돼야 할 파일을 수정하는 데 이용한다. SfcFileException도 이 기능에 사용할 수 있다.


* ShellExecute

 다른 프로그램을 실행할 때 사용한다. 악성코드가 신규 프로세스를 생성하면 새로운 프로세스도 역시 분석할 필요가 있다.


* StartServiceCtrlDispatcher

 프로세스의 main 스레드를 서비스 제어 관리자로 연결하는 서비스에 의해 사용한다. 서비스로서 동작하는 임의의 프로세스는 이 함수를 시작한지 30초 이내에 호출해야만 한다. 악성코드에서 이 함수가 존재한다면 함수는 서비스로 동작할 것이다.


* SuspendThread

 실행 중지를 위해 스레드를 중단한다. 악성코드는 때때로 스레드를 중단해 코드 인젝션을 수행한다.


* system

 일부 C 런타임 라이브러리에서 제공하는 다른 프로그램을 실행시키는 함수다. 윈도우에서 이 함수는 CreateProcess의 래퍼 함수(wrapper function)를 제공한다.


* Thread32First/Thread32Next

 프로세스 스레드를 통해 반복할 때 사용한다. 주입기는 이 함수를 이용해 인젝션할 적절한 스레드를 찾아낸다.


* Toolhelp32ReadProcessMemory

 원격 프로세스 메모리를 읽을 때 사용한다.


* URLDownloadToFile

 웹 서버에서 파일을 다운로드하고 디스크에 저장하는 상위 수준의 호출이다. 이 함수는 모든 종류의 다운로더 기능을 하나의 함수 호출에서 구현했기 때문에 대중적인 다운로더다.


* VirtualAllocEx

 원격 프로세스에서 메모리를 할당할 수 있는 메모리 할당 루틴이다. 악성코드는 때때로 VirtualAllocEx를 프로세스 인젝션의 일부로 사용한다.


* VirtualProtectEx

 메모리 지역 보호를 변경한다. 악성코드는 이 함수를 이용해 메모리 읽기 전용 섹션을 실행 가능하게 변경한다.


* WideCharToMultiByte

 유니코드 문자열을 ASCII 문자열로 변환할 때 사용한다.


* WinExec

 다른 프로그램을 실행할 때 사용한다. 악성코드가 신규 프로세스를 생성하면 새로운 프로세스도 역시 분석할 필요가 있다.


* WlxLoggedOnSAS(그리고 기타 Wlx* 함수)

 인증 모듈 행위를 하는 DLL이 익스포트해야만 하는 함수다. Wlx* 함수를 익스포트하는 악성코드는 그래픽 식별과 인증(GINA, Graphical Identification and Authentication)교체를 수행할 수도 있다.


* Wow64DisableWow64FsRedirection

 64비트 운영체제에서 32비트 파일을 로드할 때 발생하는 파일 리다이렉션을 비활성화한다.

32비트 애플리케이션이 이 함수를 호출한 이후 C:\Windows\System32로 쓰려하면 C:\Windows\SysWOW64로 리다이렉션하는 대신 실제 C:\Windows\System32로 쓰게 된다.


* WriteProcessMemory

 원격 프로세스로 데이터를 작성할 때 사용한다. 악성코드는 WriteProcessMomory를 프로세스 인젝션의 일부로 이용한다.


* WSAStartup

 하위 수준의 네트워크 기능을 초기화할 때 사용한다. 네트워크 관련 기능의 시작점을 알아내는 쉬운 방법으로 WSAStartup 호출 검색을 사용한다.



반응형
반응형

* NtSetInfomationProcess

 프로그램 권한 수준을 변경하거나 데이터 실행 방지(DEP)를 우회할 때 사용한다.


* OleInitialize

 COM 라이브러리를 초기화할 때 사용한다. COM 객체를 사용하는 프로그램은 다른 COM 함수를 호출하기 이전 OleInitialize를 호출해야만 한다.


* OpenMutex

 악성코드가 시스템에서 특정 시간에 하나의 인스턴스만 실행하게 보장하는 상호 배제 객체 핸들을 오픈한다. 악성코드는 뮤텍스명을 고정하는 경우가 많으므로 좋은 호스트 기반 감염 흔적이 될 수 있다.


* OpenProcess

 시스템 동작 중인 다른 프로세스 핸들을 오픈한다. 이 핸들은 다른 프로세스 메모리로 읽고 쓰거나 다른 프로세스로 코드로 주입할 때 사용한다.


* OpenSCManager

 서비스 제어 관리자 핸들을 오픈한다. 서비스를 설치, 수정, 제어하는 임의의 프로그램은 다른 서비스 조작 함수 이전에 반드시 이 함수를 호출해야만 한다.


* OutputDebugString

 디버거에 붙으면(attach) 문자를 출력한다. 이는 안티디버깅 기법으로 사용할 수 있다.


* PeekNamePipe

 파이프에서 데이터를 삭제하지 않고 명명한 파이프에서 데이터를 복제할 때 사용한다.

이 함수는 리버스 셸에 자주 사용한다.


* Process32First/Process32Next

 CreateToolhelp32Snapshot 이전 호출에서 프로세스를 수집하기 시작할 때 사용한다.

악성코드는 인젝션할 프로세스를 검색할 때 프로새스를 검색한다.


* QueryPerformanceCounter

 하드웨어 기반 성능 카운터 값을 검색할 때 사용한다. 이 함수는 때때로 안티디버깅 기법의 일부로 시간 정보를 입수할 때 사용한다. 컴파일러가 종종 추가해 많은 실행 파일에서 포함하고 있으므로 이 함수를 임포트했다는 사실 자체가 제공하는 정보는 거의 없다.


* QueueUserAPC

 다른 스레드에서 코드를 실행할 때 사용한다. 악성코드는 QueueUserAPC를 이용해 다른 프로세스에 코드를 주입한다.


* ReadProcessMemory

 원격 프로세스 메모리를 읽을 때 사용한다.


* recv

 원격 시스템에서 데이터를 수신한다. 악성코드는 종종 이 함수를 이용해 외부 명령어 제어 서버에서 데이터를 수신한다.


* RegisterHotKey

 사용자가 특정 키 조합(CTRL-ALT-J)을 입력할 시점을 알려주는 핸들러를 등록할 때 사용한다. 이 함수는 사용자가 키 조합을 입력할 때 활성화된 윈도우와 관계 없다. 이 함수는 때때로 스파이웨어가 특정 키 조합을 입력할 때까지 은폐할 때 사용한다.


* RegOpenKey

 레지스트리 키를 읽고 편집하는 핸들을 오픈한다. 레지스트리 키는 때때로 소프트웨어가 호스트에 기록할 때 쓰기도 한다. 레지스트리는 운영체제 전체와 애플리케이션 설정 정보를 갖고 있다.


* ResumeThread

 이전에 중단한 스레드를 제거한다. ResumeThread는 인젝션 기법의 일부로 사용한다.


* RtlCreateRegistryKey

 커널 모드 코드에서 레지스트리를 생성할 때 사용한다.


* RtlWriteRegistryValue

 커널 모드 코드에서 레지스트리를 작성할 때 사용한다.


* SamIConnect

 계정 정보에 접근하는 호출을 위해 보안 계정 관리자(SAM, Security Account Manager)에 접속한다. 해시를 덤프하는 프로그램은 사용자의 로그인 패스워드 해시를 수집할 용도로 SAM 데이터베이스에 접근한다.



반응형
반응형

* InternetOpenUrl

 FTP, HTTP, HTTPS를 사용해 특정 URL 연결을 오픈한다. URL이 고정이라면 좋은 네트워크 기반의 시그니처로 사용할 수 있다.


* InternetReadFile

 이전에 오픈한 URL에서 데이터를 읽는다.


* InternetWriteFile

 이전에 오픈한 URL에서 데이터를 쓴다.


* IsDebuggerPresent

 현재 프로세스가 디버깅 중인지 여부를 확인하는데, 안티디버깅 기법의 일부로 종종 사용한다. 이 함수는 컴파일러가 종종 추가해 많은 실행 파일에 포함돼 있으므로 단순히 이 함수를 임포트한 사실만으로 알아낼 수 있는 정보는 거의 없다.


* IsNTAdmin

 사용자가 관리자 권한을 갖는지 확인한다.


* IsWoW64Process

 32비트 프로세스가 64비트 운영체제에서 동작하고 있는지 확인할 때 사용한다.


* LdrLoadDll

 LoadLibrary와 같이 프로세스로 DLL을 로드하는 하위 수준의 함수다. 일반 프로그램은 LoadLibrary를 사용하므로 임포트 함수의 존재 여부로 프로그램이 은폐 시도를 하는지 알 수 있다.


* LoadLibrary

 프로그램을 시작할 때 로드하지 않은 프로세스로 DLL을 로드한다. 거의 모든 Win32 프로그램이 임포트한다.


* LoadResource

 PE 파일에서 메모리로 리소스를 로드한다. 악성코드는 때때로 문자열, 설정 정보, 다른 악의적인 파일을 저장할 목적으로 리소스를 사용한다.


* LsaEnumerateLogonSessions

 현재 시스템에서 로그온 세션을 수집하는데 계정 정보를 훔치는 용도로 사용할 수 있다.


* MapViewOfFile

 메모리로 파일을 매핑해서 메모리 주소를 통해 파일 내용에 접근할 수 있게 한다. 실행기, 로더, 주입기는 이 함수를 이용해 PE 파일을 읽고 수정한다. MapViewOfFile을 이용해 악성코드는 파일 내용을 수정할 목적으로 WriteFile을 사용하지 않을 수 있다.


* MapVirtualKey

 가상 키 코드를 문자 값으로 변환한다. 키로깅 악성코드가 자주 사용한다.


* MmGetSystemRoutineAddress

 GetProcAddress와 유사하지만 커널 코드가 이용한다. 이 함수는 다른 모듈에서 함수 주소를 알아낼 수 있지만, ntoskrnl.exe와 hal.dll에서만 가능하다.


* Module32First/Module32Next

 프로세스로 로드한 모듈을 수집하는 데 사용한다. 주입기는 이 함수를 이용해 코드 인젝션 위치를 결정한다.


* NetScheduleJobAdd

 특정 날짜와 시간에 실행할 프로그램 요청을 추가한다. 악성코드는 NetScheduleJobAdd를 이용해 다른 프로그램을 동작할 수 있다. 악성코드 분석가로서 미래에 실행될 프로그램 위치를 알아내고 분석할 필요가 있다.


* NetShareEnum

 네트워크 공유 정보를 수집할 때 사용한다.


* NtQueryDirectoryFile

 디렉토리에서 파일 관련 정보를 반환한다. 루트킷을 주로 파일을 숨길 용도로 이 함수를 후킹한다.


* NtQueryInformationProcess

 특정 프로세스에 관련한 다양한 정보를 반환한다. 이 함수는 때때로 CheckRemoteDebuggerPresent와 동일한 정보를 반환하기 때문에 안티디버깅 기법으로 사용하기도 한다.


반응형
반응형

* GetForegroundWindow

 데스크톱에서 현재 포어그라운드로 수행 중인 핸들을 반환한다. 키로거는 보통 이 함수를 이용해 어떤 윈도우에서 사용자가 키 입력을 하고 있는지 확인한다.


* gethostbyname

 원격 호스트로 IP 연결하기 전에 특정 호스트명에 대한 DNS 질의를 수행할때 사용한다. 명령 제어 서버가 제공하는 호스트명은 네트워크 기반의 좋은 시그니처가 될 수 있다.


* gethostname

 컴퓨터의 호스트명을 검색한다. 백도어는 공격 대상 장비를 조사할 때 때때로 gethostname을 사용한다.


* GetKeyState

 키로거가 키보드에서 특정 키의 상태 정보를 획득할 때 사용한다.


* GetModuleFilename

 현재 프로세스에 로드된 모듈 파일명을 반환한다. 악성코드는 이 함수를 이용해 현재 실행 중인 프로세스 내의 파일을 수정하고 복사한다.


* GetModuleHandle

 이미 로드한 모듈의 핸들을 가져올 때 사용한다. 악성코드는 GetModuleHandle 을 이용해 로드한 모듈에서 코드를 위치시키고 수정하거나 코드 인젝션에 사용할 좋은 위치를 탐색한다.


* GetProcAddress

 메모리로 로드한 DLL에서 함수 주소를 검색한다. PE 파일 헤더에서 임포트한 함수뿐 아니라 다른 DLL에서 함수를 임포트할 때 사용한다.


* GetStartupInfo

 표준 핸들이 위치한 곳과 같이 현재 프로세스의 실행 환경에 관한 세부 정보를 담고 있는 구조체를 검색한다.


* GetSystemDefaultLangId

 시스템의 기본 언어 설정을 반환한다. 이를 이용해 특정 지역에 있는 시스템만 영향을 받게 하는 ‘충성스러운’ 악성코드는 감염 장비의 정보를 일부로 화면과 파일명을 개별화한다.


* GetTempPath

 임시 파일 경로를 반환한다. 악성코드가 이 함수를 호출하면 임시 파일 경로에 임의의 파일을 읽고 쓰는지 확인한다.


* GetThreadContext

 주어진 스레드의 컨텍스트 구조체를 반환한다. 스레드 컨텍스트는 레지스터 값과 현재 상태 같은 스레드 정보 모두를 저장한다.


* GetTickCount

 부팅 시간 이후 경과 시간을 밀리초로 가져온다. 이 함수는 때때로 안티디버깅 기법으로 시간 정보를 수집할 때 사용한다. 컴파일러가 종종 GetTickCount를 추가해 많은 실행 파일을 포함하므로 단순히 이 함수가 임포트됐다고 해도 알아 낼 수 있는 정보는 거의 없다.


* GetVersionEx

 윈도우 현재 실행 버전에 관한 정보를 반환한다. 이를 이용해 공격 대상을 관찰하거나 다른 버전의 윈도우 사이에 바뀐 문서화하지 않은 구조체의 다른 오프셋 중에 선택한다.


* GetWindowsDirectory

 윈도우 디렉토리(보통 C:\Windows)의 파일 경로를 반환한다. 악성코드는 이를 호출해 추가적인 악성 프로그램을 설치할 디렉토리를 알아낸다.


* inet_addr

 connect와 같은 함수가 사용할 수 있게 127.0.0.1과 같은 IP 주소 문자열을 반환한다. 지정된 문자열은 네트워크 기반 시그니처로 활용할 수 있다.


* InternetOpen

 InternetOpenUrl 이나 InternetReadFile 같이 WinINet에서 인터넷에 접근할 수 있는 상위 수준 함수를 초기화 한다. InternetOpen을 검색하면 인터넷 접속 기능 시작점을 발견할 수 있는 좋은 방법이다. InternetOpen 파라미터 중 하나는 User-Agent 인데, 좋은 네트워크 기반 시그니처로 활용할 수 있다.



반응형
반응형

* CreateService

 부팅 시간에 시작할 수 있는 서비스를 생성한다. 악성코드는 CreateService를 이용해 영구적인 설치, 은폐하거나 커널 드라이버를 로드한다.


* CreateToolhelp32Snapshot

 프로세스, 힙, 스레드, 모듈 스냅샷을 생성할 때 사용한다. 악성코드는 이 함수를 프로세스나 스레드를 통해 반복하는 코드 일부로 사용한다.


* CryptAcquireContext

 종종 윈도우 암호 사용을 초기화하는 악성코드가 이용하는 첫 번째 함수다. 암호화와 관련한 다른 함수가 많이 존재하는데, 대부분 Crypt로 시작한다.


* DeviceIoControl

 사용자 공간에서 장치 드라이버로 제어 메시지를 전송한다. DeviceIoControl은 커널 기반의 악성코드가 가장 자주 이용하는데, 이는 쉽고 사용자 공간과 커널 공간 사이에서 정보를 주고받는 유연한 방법이기 때문이다.


* DllCanUnloadNow,  DllGetClassObject, DllInstall, DllRegisterServer, DllUnregisterServer

 프로그램이 COM 서버를 구현하고 있다는 사실을 알 수 있는 익스포트 함수다.


* EnableExecuteProtectionSupport

 호스트의 데이터 실행 보호(DEP:Data Execution protection) 설정을 수정할 때 사용하는 비공식적인 API 함수로 공격을 좀 더 용이하게 한다.


* EnumProcesses

 시스템에 사용 중인 프로세스를 나열하는 데 사용한다 악성코드는 인젝션할 프로세스를

찾기 위해 프로세스를 종종 나열한다.


* EnumProcessModules

 특정 프로세스가 로드한 모듈(실행 파일과 DLL)을 나열하는 데 사용한다.


* FindFirstFile/FindNextFile

 디렉토리를 통해 검색하고 파일 시스템을 나열하는 데 사용한다.


* FindResource

 실행 파일이나 로드한 DLL에서 리소스를 찾는 데 사용한다. 악성코드는 때때로 문자열, 설정 정보, 악의적인 파일을 저장할 때 리소스를 사용한다. 이 함수의 사용 흔적이 보이면 악성코드의 PE 헤더 내에 있는 .rsrc 섹션을 확인해보자.


* FindWindow

 데스크톱에서 오픈한 윈도우를 찾는다. 이 함수는 때때로 OllyDbg 윈도우를 검색하는 안티디버깅 기법으로 사용한다.


* FtpPutFile

 원격 FTP 서버로 파일을 업로드할 때 사용하는 상위 수준의 함수이다.


* GetAdaptersInfo

 시스템에서 네트워크 어댑터에 관한 정보를 획득할 때 사용한다. 백도어는 때때로 GetAdaptersInfo를 호출해 감염 시스템 관련 정보를 일부 수집하는 용도로 사용한다. 일부 경우에는 안티가상머신 기법의 일부로 VMware의 MAC 주소 확인에 사용하기도 한다.


* GetAsyncKeyState

 특정 키를 눌렀는지 여부를 확인할 때 사용한다. 악성코드는 때때로 이 함수를 이용해 키로거를 구현한다.


* GetDC

 윈도우 장치 컨텍스트 핸들이나 전체 화면을 반환한다. 화면을 캡처하는 스파이웨어는 이 함수를 이용한다.


반응형

+ Recent posts