밍경송의 E.B
[사이버보안] 악성코드와 SW보안(2)- 악성코드 분석 본문
이 글은 2024-1 ㅇ화여대 (인실 도 교수님의) 사이버보안개론 수업자료를 참고하였음을 밝힙니다.
🖥️악성코드 분석 방법
1 코드 정적 분석(Static)
: 악성 코드를 실행하지 않고 분석
- 정적 분석의 시작
- 실행 파일의 분석이 불가능하기 때문에, 실행 파일에서 소스를 역추출하여 분석을 시작함.
- 기계어나 어셈블리어와 같은 저급 언어로 소스 분석이 어려움
- Disassemble의 대상이 되는 PE 포맷 파일(실행파일)로부터 소스를 추출 (대표적 ex : IDA Pro)
*PE 포맷 파일 : 주로 확장자가 .exe 또는 .dll 등인 실행파일
- 정적 분석 도구 (무료 ex : OllyDbg, Immunity Debugger, WinDBG 등)를 사용하여 어셈블리어 소스에 실제로 악성 행위를 하는 코드가 포함되어 있는지 분석
- 의심되는 함수 호출, 의심되는 문자열 확인 등
그렇다면, 악성코드는 정적 분석 방법을 어떻게 회피하는가?
- 패킹(Packing) 또는 난독화(Obfusscation)
- 암호화나 압축을 통해 코드를 읽기 어렵게 만듦.
=>언패킹(Unpacking) 하여 분석하거나, 난독화된 메세지 자체를 분석해서 대응 가능.
+ 정적 분석을 위해서는 OS. 프로그래밍, 프로그래밍 언어, 분석 도구, 프로세스 모니터링 도구 등에 대한 지식이 필요함.
2 코드 동적 분석(Dynamic)
: 악성 코드를 직접 실행하여 해당 코드가 어떤 행위를 하는지를 관찰하여 판단하는 방법
- 악성 코드가 실제로 실행될 수 있기 때문에 '통제된 환경'을 만드는 것이 필요함.
- 문제 발생 시 실행 환경의 초기화가 가능한 환경 -> 가상머신을 많이 이용함.
- 프로세스 확인 : 작업관리자, GMER .. 등
- 작업 관리자 : 현재 실행되는 프로세스를 확인할 수 있음.
- 독특한 이름의 프로세스가 실행되고 있는 경우 검색해보기
- 자원을 많이 소모하는 경우 의심해보기
- 별도의 자식 프로세스를 만들어 이를 통해 악성 행위를 하는 경우도 있음.
- 작업 관리자 : 현재 실행되는 프로세스를 확인할 수 있음.
- Roolkit 탐지 tool : GMER 등
- 루트킷(Roolkit)이란, 공격자가 심어놓은 프로그램을 숨기기 위한 목적으로 사용되는 프로그램
- → SSDT 후킹 등의 기술을 이용하여 작업 관리자에서 악성 코드 프로세스가 보이지 않게 숨길 수 O
- Process Explorer
- 부모와 자식 프로세스의 관계가 잘 드러나는 도구로, 프로세스별로 어떤 파일을 열었는지, 어떤 모듈. 라이브러리를 사용하는지 등의 정보 제공
- 등록된 시작 프로그램 확인(ex Autoruns 등)
- OS를 재시작한 이후에도 다시 실행되는 악성 코드 존재. -> OS에 등록된 다른 프로그램이 있는지 확인
- File, Registry 변경 내용 확인(ex Winalysis)
- 악성 코드는 기존 파일을 악의적으로 지우거나 변경. 혹은 새로 생성하기 때문에 변경내용 확인해보기
- '' + Network의 활동 확인
- Process Monitor : Process나 registry 관련 연산 수행 과정 + 네트워크 활동 보여줌
- TCPView : 어떤 port를 열었는지, 외부 network 접속 등에 대한 모니터링 제공
🖥️악성코드 제거
기본
: 악성 코드 프로세스 종료 후 악성코드가 생성한 registry 값과 파일 등 삭제
but 자기 보호로직이 강력한 경우. OS가 동작하지 않을 수 있기 때문에 제거 전에 백업이 필요함.
안전 모드 부팅 후 삭제
: 악성 코드가 Roolkit 수준에서 프로세스 종료 방지나 파일변경 방지 기능이 있는 경우, 삭제가 불가함.
→ 안전 모드 부팅 후 악성 코드를 삭제하고 재부팅
WHY? : 안전 모드로 부팅하면 대부분의 루트킷이 동작하지 않음.
다시.. roolkit이란? 공격자의 프로그램을 숨기기 위한 프로그램
🖥️SW 개발 보안(시큐어 코딩)
- 안전한 SW 개발을 위해 소스코드에서 보안 취약점을 제거
why?
소스코드의 보안 취약점을 이용한 사이버 공격은 일반적인 보안 장비로 대응이 어렵기 때문
= 보안 장비들이 '정상'으로 인식함.
관련 공격 2가지에 대해 알아보겠숩다.
1 메모리 버퍼 오버플로 공격
: 프로그램이 실행되는 도중에 메모리 오류가 발생하여 의도치 않은 동작이 일어나는 보안 취약점
*개발자가 예상한 범위를 벗어난 입력값이 전달되는 경우 = 지정된 버퍼 크기보다 넘치게 저장하는 경우
**모리스 웜이 이 방식을 이용했다. 천재군..
-> 공격자가 이 결함을 발견한 경우, 전달하는 데이터의 길이와 내용을 조정해서 프로그램이 의도하지 않은 방식으로 실행되게 할 수 있음.
예를 들면, 중요한 역할(프로그램 흐름 제어 등)을 하는 시스템 메모리 영역으로 인증 없이 침범하도록 만드는 등의 작업을 수행 가능.
ex 버퍼 오버플로우가 발생한 C 소스코드 예
* buffer 크기를 10으로 고정했는데, 만약 사용자가 10자리 이상의 값을 넣는다면 오버플로우 발생
⭐대응방안
- 최신 OS 자체의 방어
- 어도비, 오피스 등의 보안 패치
- SECURE CODING :개발 단계에서부터 안전하게 코딩하기
how?
- 입력 값에 대한 길이(크기) 검증
- 오버플로에 안전한 라이브러리 사용 (strcpy → strcpy_s)
- 정적 소스 분석 도구로 미리 수정
2 포맷 스트링 공격
: 포맷 스트링(Format string)을 이용하여 프로그램의 특정 메모리 내용을 읽거나 쓰는 보안 공격 기법
*Format string : C 언어의 printf() 등의 함수에서 사용되는 문자열의 입출력 형태를 정의하는 문자열
-> printf 계열은 다 이 공격의 위험성을 내포함
EX) 포맷 스트링을 통해 메모리 주소 확인하기
*%s와 같이 포맷지정자가 필요함.
EX) 포맷 스트링을 통해 메모리 변조하기
*정수 변수의 주소를 어떤 변수에 저장하고, %n을 사용하여 그 값을 변조할 수 있음을 보여줌.
%n은 정수 변수의 주소를 전달받아 지금까지 출력된 문자(바이트) 수를 저장하는 역할을 함.
printf("%d%n\n", value,&target); // %n이 target과 매치됨. -> 100(3자리) 니까 3 출력
printf("%16d%n\n", value,&target); //0000000...100이 value고 이게 16자리니까 16출력
⭐대응방안
- %n, %hn 가능한 사용 X
- 정적 분석을 통해 미리 위험요소 제거
- 최근 컴파일러는 포맷 스트링에 대한 자체적인 검사 내장
추가로 운영체제 수업때도 다뤘던 Race condition에 대해서도 간략하게 언급함.
+ 경쟁 조건 (Race condition)
: 여러 개의 프로세스 혹은 스레드가 공유하는 자원에 대해 동시에 접근하려는 상태
⭐대응방안
- 동기화 구문 사용 : 한 번에 하나의 프로세스만접근하도록. (but 성능 감소가 발생하기 때문에 최소화하여 사용)
'CSE > 사이버보안개론' 카테고리의 다른 글
[사이버 보안] 무선 네트워크 보안(2) - 모바일 보안, 블루투스 보안, IoT 보안 (1) | 2024.06.12 |
---|---|
[사이버 보안] 무선 네트워크 보안(1) - 무선랜 보안 (0) | 2024.06.12 |
[사이버 보안] 악성코드와 SW보안(1) - 바이러스, 웜, 트로이목마, 사회공학보안공격 (0) | 2024.06.10 |
[사이버보안] 접근제어 (모델) (0) | 2024.06.09 |
[사이버보안] 블록체인 (1) | 2024.06.09 |