<보안 운영체제>
1. 보안 운영체제
(1) 개요
운영체제 내부에 보안기능을 구현한 것이다.
(2) 주요 제공 기능
1) 보호대상
메모리, 보조기억장치(하드디스크, CD 등)상의 파일 또는 데이터의 집합, 메모리상에서 실행 중인 프로그램, 파일들의 디렉터리, 하드웨어 장치
2) 보호방법
- 물리적 분리 : 사용자별로 별도의 장비만 사용하도록 제한하는 방법, 강한 형태의 분리지만 실용적이지 못하다.
- 시간적 분리 : 프로세스가 동일시간에 하나씩만 실행되도록 하는 방법
- 논리적 분리 : 각 프로세스에 논리적인 구역을 지정하는 방법, 할당된 구역 밖에서 할 수 있는 일 제한
- 암호적 분리 : 내부에서 사용되는 정보를 외부에서는 알 수 없도록 암호화하는 방법
- 이외에도 다양한 조합으로 운영될 수 있다.
3) 파일시스템 보호
- 파일의 보호는 파일의 공용문제와 병행하여 고려되어야 한다. 무조건 보호하면 자원의 낭비를 초래하기 때문
- 파일이름 명명 : 다른 사용자 파일의 이름을 알 수 있는 기법이 없고, 그 이름을 추측하기 힘들다는 가정에 근거
- 패스워드 : 각 사용자마다 서로 다른 패스워드 제공하여 그 패스워드를 알아야만 파일 이용가능
- 암호화 : 파일내용자체를 암호화하여 누구나 공유할 수 있지만 인가된 사용자만 내용파악할 수 있게 한다.
(3) 보안 기능
- 사용자 식별 및 인증, 임의적/강제적 접근통제, 객체 재사용 보호(할당되는 기억공간에 이전 데이터가 삭제되지 않고 존재하는 경우에 비밀 데이터 노출될 수 있다), 완전한 조정(모든 접근을 통제), 신뢰 경로, 감사 및 감사기록
2. 보안커널(Security Kernel)
(1) 개요
- 보안커널은 TCB내에 있는 하드웨어, 소프트웨어, 펌웨어로 구성되며, 참조모니터 개념을 구현하고 집행한다.
- 보안커널은 주체와 객체 사이의 모든 접근과 기능을 중재한다.
- 참조모니터 개념 수행하는 프로세스를 위해 분리가 제공되고, 프로세서는 변조방지할 수 있어야 한다.
- 모든 접근시도에 대해 실행되어야 하고 우회 불가능해야 한다.
- 완전하고 포괄적인 방식으로 충분히 시험되고 확인되어야 한다.
cf) 참조모니터 : 승인되지 않은 접근으로부터 객체 보호하기 위해 객체에 대한 모든 접근을 통제하는 추상적 개념
(2) 신뢰 컴퓨팅 기반(TCB, Trusted Computing Base)
- 하나의 컴퓨터 시스템 내의 모든 보호 메커니즘의 총체로서, 시스템과의 조화를 통해 보안정책 적용할 책임이 있다.
- 신뢰 경로란 사용자, 프로그램, 커널과의 통신채널을 말한다. TCB는 이 통신채널이 손상되지 않도록 보호기능 제공
- 보안경계(Security Perimeter)는 시스템 구성요소 중 신뢰/비신뢰 구성요소의 경계를 긋기 위해 사용되는 개념적 부분
- 4가지 모니터 기능 : 프로세스 활성화, 실행 도메인 변경, 메모리 보호, 입출력 연산
(3) 설계시 고려사항(참조모니터 및 보안커널의 특징)
- 격리성 : 분리되고, 부정조작을 방지한다.
- 검증가능성 : 크기가 작아야 한다. 모든 동작은 항상 분석과 테스트를 통해 확인할 수 있어야 한다.
- 완전성 : 우회불가능해야 한다.
3. 신뢰 플랫폼 모듈(TPM, Trusted Platform Module)
(1) 개요
- TPM은 신뢰 컴퓨팅 그룹이라는 산업체 컨소시엄에 의해 표준화된 개념이다.
- 신뢰 컴퓨팅을 위한 하드웨어/소프트웨어 방법에서 핵심이 되는 하드웨어 모듈이다.
- 훼손방지가 필수적이기 때문에 하드웨어 칩으로 구현하는 것이 일반적이지만 소프트웨어로 구현하기도 한다.
- 칩으로 구현된 TPM은 소프트웨어 방식의 공격과 더불어 물리적 도난의 경우에도 정보노출이 용이하지 않다는 장점
(2) 기본 서비스
- 인증된 부트 서비스 : 전체 운영체제를 단계적으로 부팅하고, 운영체제가 적재될 때 각 부분이 사용을 위해 승인된 버전임을 보장
- 인증 서비스 : 일단 TPM에 의해 설정이 완성되고 로그인되면, TPM은 다른 부분 설정을 인증할 수 있다.
- 암호화 서비스 : 특정 기계가 특정 설정으로 되어 있을 때만, 그 기계에서 데이터의 복호화 수행하는 방식으로 지원
<클라이언트 보안>
1. 악성 소프트웨어(악성 코드)
(1) 개요
- 컴퓨터 프로그램이 의도적/비의도적으로 실행되면서 기밀성, 무결성, 가용성 등을 침해할 경우, 유해 프로그램으로 간주된다. 특히, 의도적으로 침해할 목적으로 작성된 프로그램을 악성 프로그램이라고 한다.
- 악성 프로그램 특징 비교
구분 | 컴퓨터 바이러스 | 트로이 목마 | 웜 |
자기 복제 | 있음 | 없음 | 매우 강함 |
형태 | 파일 등 감염대상 필요 | 유틸리티로 위장 또는 안에 코드형태로 삽입 | 독자적으로 존재 |
전파 경로 | 사용자가 감염된 파일을 옮김 | 사용자가 내려받음 | 네트워크를 통해 스스로 전파 |
주요 증상 | 해당 시스템 및 파일 손상 | PC 성능저하, 좀비 PC | 네트워크 성능저하 |
- 악성 소프트웨어 분류
구분 | 설명 | 종류 | |
독립형과 기생형 | 독립형 | 자체적으로 구동될 수 있는 프로그램 | 웜, 좀비 |
기생형 | 독립적으로 존재할 수 없음 | 바이러스, 논리폭탄, 백도어 | |
자기복제 여부 | 바이러스성 | 자기복제 함 | 웜, 바이러스 |
비-바이러스성 | 자기복제 안함 | 트로이목마, 백도어 |
(2) 바이러스(Virus)
- 컴퓨터 바이러스는 다른 프로그램을 변형시키도록 하여 감염시키는 프로그램이다.
제1세대 | 원시형 바이러스(Primitive Virus) | 프로그램 구조가 단순, 분석이 상대적으로 쉬움 |
제2세대 | 암호화 바이러스(Encryption Virus) | 백신 프로그램이 진단할 수 없도록 바이러스 프로그램 일부 또는 대부분을 암호화시켜 저장 |
제3세대 | 은폐형 바이러스(Stealth Virus) | 백신 프로그램이 감염된 부분을 읽으려고 할 때, 감염되기 전의 내용을 보여줘 바이러스가 없는 것처럼 백신 프로그램이나 사용자를 속임 |
제4세대 | 갑옷형 바이러스(Armour Virus) | 바이러스 분석을 어렵게 하고, 백신 프로그램 개발을 지연시킴 |
제5세대 | 매크로 바이러스(Macro Virus) | 데이터 파일 중에 명령어를 실행시키는 MS워드나 엑셀 등에 붙어서 그 파일이 열릴때 실행됨 |
- 바이러스 예방 : 신뢰성 있는 업체에서 구입한 상업용 소프트웨어를 사용, 안전하다고 생각될 때에만 첨부파일을 열기, 바이러스 스캐너를 이용하여 정기적으로 검사, 바이러스 스캐너는 업데이트를 통해 최신화, Windows Script Host, ActiveX, VBScript, JavaScript는 비활성화하기
(3) 웜(Worm)
- 웜은 자신을 복제하여 네트워크 연결을 통해 컴퓨터에서 컴퓨터로 복제본을 전송한다.
- 다른 시스템에 직접적인 영향을 미치지 않는다는 점에서 트로이목마와 구분되며, 다른 프로그램에 기생하지 않는다는 점에서 바이러스와 구분된다.
- 대응책 : 안티바이러스 소프트웨어, 네트워크 기반 웜 방어
- ex) 코드레드, 슬래머
(4) 트로이 목마(Trojan horse)
- 자신의 실체를 드러내지 않으면서 마치 다른 프로그램의 한 유형인 것처럼 가장하여 활동하는 프로그램이다.
- 자기 복제를 하지 않으며 다른 파일을 감염시키거나 변경시키지 않는다. 하지만 트로이목마가 포함된 프로그램이 실행되는 순간, 시스템은 공격자에게 시스템을 통제할 수 있는 권한을 부여하게 된다(루트 킷의 일종).
- 트로이목마 기능 : 원격 조정, 패스워드 가로채기, 키보드 입력 가로채기, 시스템 파일 파괴
- 대응책 : 신뢰할 수 없는 파일을 확인없이 설치 금지, 취약점 패치, 안티-트로이목마 도구
- 탐지방법 : 안티바이러스 프로그램 등의 도구 이용, 네트워크 연결상태 및 자신의 컴퓨터 열려진 포트 검사, 자신이 설치하지 않는 프로그램 동작하는지 검사, 레지스트리 검사하여 자동실행 설정되어있는 프로그램 검사
(5) 기타 악성 소프트웨어
논리폭탄 | 조건이 충족되면 트리거가 작동 |
백도어(트랩 도어) | 시스템의 정상적인 보호수단을 우회하기 위하여 사용하는 악의적인 소프트웨어 |
Exploit | 소프트웨어나 하드웨어 및 컴퓨터 관련 전자제품의 버그, 취약점 등의 설계상 결함을 이용해 공격자의 의도된 동작을 수행하도록 만들어진 절차나 일련의 명령, 스크랩트, 프로그램, 조작을 이르기까지의 사용한 공격행위 |
멀웨어(Malware) |
응용프로그램의 기능을 위협하는 등의 악의적인 행위를 수행하는 프로그램 |
Keyloggers | 시스템의 키 입력을 갈취, 컴퓨터 입력정보 가로채기 타이핑 속도 불규칙적으로 입력해도 소용X |
Rootkit | 컴퓨터 시스템에 침입 후 루트 수준의 접근권한을 얻기 위해 사용하는 해커 도구모음 |
스파이웨어 | 컴퓨터에서 정보를 수집해서 다른 시스템으로 전송하는 소프트웨어 |
애드웨어 | 자동으로 광고를 생성하는 소프트웨어, 감염시 팝업광고가 뜨거나 브라우저가 광고사이트로 연결 |
크라임웨어 | 온라인을 통해 범죄를 하기 위해 만들어진 프로그램 |
브라우저 하이재커 | 브라우저를 하이재킹하여 홈페이지와 검색페이지, 툴바를 통제하고 조작하는 프로그램 |
다이얼러 | 모뎀이 특정 번호로 연결되도록 하여 전화걸때마다 공격자가 수익 얻게되는 프로그램 |
조크(Joke) | 실제 바이러스는 아니지만 사용자에게 심리적인 위협이나 불안을 조장하는 프로그램 |
Hoax | 남을 속이거나 장난을 목적으로 퍼트리는 가짜 바이러스, ex) 허위 바이러스 경고 메일 |
자동실행 바이러스 | 이동형 저장장치에 복사되어 자동실행되도록 설정된 악성코드 autorun.inf 파일 이용 또는 레지스트리 등록 |
2. 인터넷 활용 보안
(1) 웹브라우저 보안
- 인터넷 익스플로어에 대한 보안을 구현할 때, 사이트에 따라 서로 다른 보안 요구사항이 필요할 때가 있다.
인터넷 | 다른 세가지 영역에 포함되지 않은 웹사이트를 위한 영역 |
로컬 인트라넷 | 사용자의 컴퓨터와 네트워크(인트라넷)상에 있는 웹사이트를 위한 영역 |
신뢰할 수 있는 사이트 | 사용자가 안전한 콘텐츠를 갖고 있다고 신뢰하는 페이지를 설정하는 웹사이트 영역 |
제한된 사이트 | 사용자가 신뢰할 수 없거나 보안 페이지로 설정할 수 없는 웹사이트 영역 |
(2) 쿠키(Cookie)
1) 개요
- 사용자가 인터넷 웹사이트에 방문할 때 생기는 4KB 이하의 파일을 말한다.
- 사용자와 웹사이트를 연결해주는 정보가 담겨져 있기 때문에 나중에 클라이언트가 해당 사이트에 접속하려고 할 때 쿠키 내용을 이용하여 클라이언트 신분을 알 수 있게 해준다.
임시 쿠키(세션 쿠키) | 인터넷 익스플로어가 실행되고 있는 시간동안만 유효 인터넷 익스플로어 종료한 후 컴퓨터에서 제거되는 쿠키 |
영구 쿠키(저장된 쿠키) | 하드디스크에 남아있음, 보존기간은 설정에 따라 달라진다. |
2) 용도
- 사이트 개인화, 장바구니 시스템, 웹사이트 이용방식 추적, 타겟 마케팅
3) 구조
기본구조 -> Set-Cookie: name=value; expires=[Date]; domain=[Domain]; path=[Path]; [secure]
쿠키는 4개의 속성과 하나의 데이터를 가지는 구조체이다. 서버는 응답에 Set-Cookie 헤더를 포함시키는 방식으로 쿠키를 설정한다. 쿠키는 쿠키 데이터를 생성한 웹페이지에서만 그 데이터를 읽을 수 있으나, path 항목을 지정해주면 해당 path에서 쿠키 데이터 공유할 수 있다. 도메인 속성은 패스 속성을 확장한 것이다.
4) 쿠키 보안 취약점
- XSS(Cross-Site Scripting) : 자바스크랩트가 사용자의 컴퓨터에서 실행된다는 점을 이용한 공격, 공격자가 사이트에 스크랩트를 삽입하여 의도치 않은 기능을 작동시킨다.
- Sniffing : 통신 상에서 감청, 도청하는 행위, 쿠키 값을 암호화하지 않고 전송하는 경우 발생할 수 있다.
- 공용 PC에서 쿠키값 유출 : 쿠키 파일을 사용자의 하드디스크에 저장되므로 공용 PC의 경우 유출될 수 있다.
(3) 세션(Session)
- 세션은 개별 클라이언트 상태정보를 서버에 저장하는 기술을 말한다.
- 클라이언트 상태정보를 서버에 저장하기 때문에 쿠키 방식보다 보안상 안전하다는 장점
- HTTP 세션 하이재킹 : 공격자가 정상적인 사용자의 세션 ID정보를 탈취하여 정상 사용자로 위장접근
<윈도우 서버 보안>
1. 윈도우(Windows)
(1) 윈도우 시스템 구조
커널 모드 ---------------------------------------------------------------------------------------------------> |
사용자 모드 |
||||
하드웨어 | 입출력 관리자 | 시스템 서비스 | 32비트 응용프로그램 | ||
그래픽장치 관리자 | win32 서브시스템 | ||||
HAL | 마이크로 커널 | 객체관리자 | |||
보안참조관리자 | NTVDM | ||||
프로세스관리자 | |||||
로컬프로시저호출관리자 | POSIX | ||||
가상메모리관리자 | OS/2 | ||||
기타관리자 |
- HAL(Hardware Abstraction Layer) : 하드웨어 제어를 위함, 하드웨어와 소프트웨어 간 원활한 통신 가능하도록 도움
(2) 윈도우 특징
GUI 환경 | 아이콘이라는 그림명령을 통하여 쉽게 프로그램에 접근가능 |
Plug & Play | 하드웨어 새롭게 추가하는 경우, 자동으로 인식하여 환경 설정해주는 기능 |
단축 아이콘/바로가기 | 프로그램이나 데이터를 빠르고 편리하게 실행시키기 위해 원하는 위치에 원본 파일과 연결되는 아이콘 생성가능 |
멀티태스킹 | 한번에 여러가지 작업을 동시에 수행할 수 있다. |
OLE | 개체연결포함기능으로, 프로그램 간에 개체(그림, 표 등)를 교환할 수 있다. |
네트워크 기능 향상 | 다양한 프로토콜 제공하기 때문에 네트워크 설치나 인터넷 연결 등이 편리 |
다중 모니터 지원 | 한 대의 컴퓨터에 최대 8대의 모니터 연결 사용가능 |
정보의 전송 통합 | 두 개 또는 그 이상 응용프로그램에서 작업하여 상호 간의 정보를 한 응용프로그램에서 다른 응용프로그램으로 전송통합할 수 있다. |
(3) 윈도우 파일시스템
- FAT16 : 저용량(2GB이하) 하드디스크에 사용, DOS와 Windows95에 지원
- FAT32 : 고용량(2GB이상) 하드디스크에 사용, Windows95 OSR 이후부터 지원, 그러나 접근제어를 설정할 수 없다.
- NTFS(New Technology File System) : 접근제어가 적용된 윈도우 파일시스템
구분 | FAT | NTFS |
장점 | - 호환성 우수 - 단순성 - 저용량 볼륨에 최적화 |
- 대용량 볼륨 지원 - 디스크의 효율적 사용 - 강력한 보안 기능 - 자동압축 및 안전성 - 향상된 파일이름저장 및 파일길이지원 |
단점 | - 보안취약 - 대용량 볼륨에 비효율적 |
- Windows NT계열 운영체제 외에는 호환불가 - 저용량 볼륨에서는 FAT보다 속도 저하 |
(4) 윈도우 부팅 순서
1) 윈도우 XP, 윈도우 서버 2000/2003 부팅 순서
POST(Power On Self Test) 실행 -> 기본 부팅관련 설정사항 로드 -> MBR(Master Boot Record) 로드 -> NTLDR(NT Loader) 실행 -> NTDETECT.com 실행 -> ntoskrnl.exe(NT OS Kernal) 실행
2) 윈도우 비스타, 2008, 7 부팅 순서
POST(Power On Self Test) 실행 -> 기본 부팅관련 설정사항 로드 -> MBR(Master Boot Record) 로드 -> 윈도우 부트 서브 시스템 실행 -> 윈도우 OS 로더 실행
2. 윈도우 보안
(1) 윈도우 설치
- 파티션 나누기 : 파티션이란 하나의 물리적인 하드디스크에 논리적으로 분할 영역을 만드는 것을 말한다. 파티션을 나누면 C 드라이브에 심각한 오류 발생하도 D 드라이브 파일들은 안전하게 보존할 수 있다.
(2) 윈도우 계정, 권한, 인증
1) 윈도우 계정, 권한 체계
- 윈도우 기본 사용자
계정이름 | 설명 |
Administrator | 권리자 권한 계정, 사용자가 사용 가능한 계정 중 가장 강력한 권한을 가진다. |
SYSTEM | 시스템에서 최고권한을 가진 계정, 로컬에서 관리자보다 상위 권한을 가진다. 원격접속 불가능, 사용자가 이 계정을 사용하여 시스템에 로그인할 수 없다. |
Guest | 매우 제한적인 권한을 가진 계정, 기본설정은 사용불능 |
- 윈도우 기본 그룹
그룹이름 | 설명 |
Administrator | 도메인 자원이나 로컬 컴퓨터에 대한 모든 권한이 있다. |
Account Operators | 사용자나 그룹계정을 관리하는 그룹 |
Backup Operators | 시스템 백업을 위해서 모든 시스템의 파일과 디렉터리에 접근가능 |
Guest | 도메인 사용권한이 제한된 그룹, 시스템 설정 변경 권한이 없다. |
Print Operators | 도메인 프린터에 접근가능 |
Power Users | 디렉터리나 네트워크 공유, 공용 프로그램 그룹 생성, 컴퓨터 시계 설정 권한을 가진 그룹 |
Replicator | 도메인에 있는 파일을 복제할 수 있는 권한을 가진 그룹, 디렉터리 복사 서비스에 이용 |
Server Operators | 도메인의 서버를 관리할 수 있는 권한을 가진 그룹, 로컬 로그인과 시스템 재시작 및 종료권한 있다. |
Users | 도메인과 로컬 컴퓨터를 일반적으로 사용하는 그룹, 개개인에 할당된 사용자 환경을 직접 만들 수 있지만, 설정할 수 있는 항목에 한계가 있다. |
- SID(Security Identifier)
윈도우의 각 사용자나 그룹에 부여되는 고유한 식별번호이다.
2) 윈도우 인증과 패스워드(윈도우 인증 구성요소)
구분 | 설명 |
LSA(Local Security Authority) | 모든 계정의 로그인에 대한 검증 시스템 자원 및 파일 등에 대한 접근권한 검사 SRM이 생성한 감사로그를 기록 NT 보안의 중심요소이며, 보안 서브시스템이라 불림 |
SAM(Security Account Manager) | 사용자/그룹 계정 정보(패스워드 등)에 대한 데이터베이스 관리 사용자의 로그인 입력정보와 SAM 데이터베이스 정보를 비교해 인증여부를 결정 |
SRM(Security Reference Monitor) | SID를 부여, SID에 기반하여 파일이나 디렉터리에 대한 접근 허용여부를 결정하고 이에 대한 감사메시지 생성 |
(3) 공유자료 관리
1) 네트워크 드라이브
- 네트워크 드라이브는 대상 컴퓨터의 드라이브를 내 컴퓨터에서 네트워크 드라이브로 설정하여 내 컴퓨터의 드라이브처럼 사용할 수 있는 기능
2) 파일과 폴더 보안권한 설정
- 모든 권한/ 수정/ 읽기 및 실행/ 폴더 내용보기(폴더만 해당)/ 읽기/ 쓰기
3) 디렉터리 및 파일에 대한 접근권한 설정
- 규칙1 : NTFS 접근권한은 누적된다.
- 규칙2 : 파일에 대한 접근권한이 디렉터리에 대한 접근권한에 우선한다.
- 규칙3 : 허용보다 거부가 우선한다.
4) 공유자료 관리
- 공유폴더 숨기기 : 공유이름 끝에 $ 붙이기. 숨겨진 공유폴더 보려면 [보조프로그램]-[명령프롬프트]-net share 입력
- C$, D$ 등 : 드라이브에 대한 관리목적 공유폴더
- ADMIN$ : 윈도우 설치폴더에 접근하는 관리목적 공유폴더
- IPC$ : 네트워크 등에서 프로세스 간의 통신을 위해 사용하는 통로 같은 것, 널 세션(아이디와 패스워드 없이 세션 연결)의 취약점 존재 가능
(4) 암호기능 사용
1) 폴더 및 파일 암호화(EFS) : 윈도우 운영체제에서 개별 파일 또는 특정 폴더 안의 모든 파일 암호화 기능 제공
2) 볼륨 암호화(BitLocker) : 윈도우 운영체제에서 제공하는 볼륨(파티션 드라이브) 단위의 데이터 암호화 기능
- BitLocker는 컴퓨터 단위의 데이터 암호기능 제공, EFS는 사용자 단위의 데이터 암호기능 제공
(5) 레지스트리(Registry) 활용
1) 개요
- 레지스트리는 윈도우 시스템이 운영되는데 필요한 정보를 담고 있다. 설치된 소프트웨어 정보부터 환경설정, 임시저장값까지 시스템의 거의 모든 정보를 담고 있으므로 사고분석에 있어 공격자의 중요한 흔적을 찾을 수 있다.
2) 레지스트리 편집기
- 사용자가 직접 레지스트리를 조작하는 작업은 레지스트리 편집기를 통해 이루어진다.
- [시작]-[regedit] 또는 [reged32] 입력
3) 레지스트리 루트키
HKEY_CLASSES_ROOT(HKCR) | 파일 확장명과 응용프로그램의 연결정보, 윈도우 시스템에 들어있는 개체들 및 응용프로그램과 그 자동화에 대한 정보 |
HKEY_CURRENT_USER(HKCU) | 현재 로그인되어 있는 사용자와 관련된 시스템 정보 저장, HKU보다 우선권 가짐 |
HKEY_LOCAL_MACHINE(HKLM) | 시스템 전체에 적용되는 하드웨어와 응용프로그램의 설정 데이터를 저장, SAM 존재 |
HKEY_USERS(HKU) | 시스템에 대한 모든 계정과 그룹에 관한 정보를 저장 |
HKEY_CURRENT_CONFIG(HKCC) | 시스템이 시작할 때 사용하는 하드웨어 프로파일 정보를 저장 |
4) 레지스트리 보호
- 레지스트리 접근제한, 현재 레지스트리 상태 저장, 레지스트리 키 디스크에 복사
5) 레지스트리 공격
- 악성코드 감염시 시스템에는 파일 생성 또는 레지스트리 변경 등의 시스템 변화가 일어나기 때문에 이러한 변화를 분석할 수 있다면 악성코드를 탐지해낼 수 있다.
- 부팅시 악성코드 실행 : 시스템 재부팅 시 악성코드 실행시키기 위해 레지스트리 변조하게 되는데, 이때 사용되는 레지스트리는 HKLM과 HKCU이다.
(6) 윈도우 방화벽(PC 방화벽)
- PC 방화벽은 PC 내부로 유입되는 패킷뿐만 아니라 나가는 패킷까지 모두 차단하고, 사용자에게 해당 네트워크 패킷의 적절성 여부를 확인한다.
3. 윈도우 서버보안
(1) 계정 관리
1) Administrator 계정 이름 바꾸기
- 일반적으로 관리자 계정을 Administrator로 설정한 경우 로그인 시도 실패 횟수의 제한이 없는 점을 이용해 악의적인 사용자가 패스워드 유추 공격을 계속해서 시도할 수 있다.
2) Guest 계정 상태
- 기본적으로 Guest 계정은 비활성화 되어 있으나, 활성화 되어 있을 경우에는 Guest 계정으로 로그인하여 시스템 정보를 확인하거나 관리자 그룹에 추가하여 악용할 수 있는 위험이 있다.
3) 계정 잠금 임계값과 잠금기간 설정
- 자동화된 방법을 이용하여 공격자는 모든 사용자 계정에 대해 암호조합 공격을 시도할 수 있으므로 임계값 설정하여 로그인 실패 횟수를 제한해야 한다.
4) 관리자 그룹에 최소한의 사용자 포함
5) 암호와 패스워드 정책
- 패스워드 최소암호길이(8문자), 최대 사용기간(90일), 최소 사용기간(1일 또는 1주)
(2) 서비스 관리
1) 공유권한 및 사용자 그룹 설정
- Everyone이 공유계정에 포함되어 있으면 익명 사용자의 접근이 가능하므로 디폴트 공유인 C$, D$, Admin$, IPC$ 등을 제외한 공유폴더가 Everyone 그룹으로 공유가 금지되었는지 점검하여야 한다.
2) 하드디스크 기본 공유 제거
- 기본 공유폴더를 관리목적으로 사용하지 않는다면 제거해야 한다. 다만, IPC$는 제거할 경우 특정 서비스가 실행되지 않을 수 있으므로 제거하지 않도록 한다.
- 공유 제거 방법 : net share 공유이름 /delete 하고나서 레지스트리 값을 0으로 수정하기
- Null Session 접근 차단 설정하기
3) 불필요한 서비스 제거
(3) 패치 관리
- 감사 설정이 구성되어 있지 않거나 설정 수준이 너무 낮으면 보안관련 문제발생시 원인 파악이 어려우며 법적 대응을 위한 충분한 증거로 사용될 수 없다. 그러나 설정 수준이 너무 높으면 보안 로그에 불필요한 항목이 많이 기록되어 중요한 내용과 혼동할 수 있고 시스템 성능에도 영향 줄 수 있다.
4. 윈도우 네트워크 서비스
(1) 디렉터리 데이터베이스
1) 네트워크 디렉터리 서비스
- 사용자들에게 리소스를 투명하게 제공해준다. 따라서 사용자가 리소스의 정확한 위치와 접근하기 위해 필요한 단계들을 알 필요가 없다는 것을 의미
2) Active Directory
- 네트워크상의 개체에 대한 정보를 저장하며, 관리자와 사용자가 이 정보를 쉽게 찾아 사용할 수 있도록 한다.
3) Active Directory 서버
- 도메인 내에서 서버로 동작하는 컴퓨터는 구성원 서버나 도메인 컨트롤러의 역할 중 하나를 수행할 수 있다. 도메인 내에 있지 않은 서버는 독립 실행형 서버가 된다.
- 구성원 서버는 계정 로그인을 처리하지 않고 Active Directory 복제에 참여하지 않거나 도메인 보안정책 정보를 저장하지 않는다.
<유닉스/리눅스 서버 보안>
1. 유닉스(UNIX)
(1) 개요
- 유닉스 시스템 특징
대화식 운영체제 | 사용자와 운영체제간의 상호작용은 명령어 해석기인 셸에 의해 이루어진다. |
멀티태스킹 | 여러 개의 명령어를 동시에 처리하는 방식 |
멀티유저 | 동시에 여러 사용자가 하나의 컴퓨터 사용가능 |
호환성 및 이식성 | 하드웨어적인 구조에 독립적으로 응용프로그램을 작성할 수 있는 환경 제공 |
계층적 파일시스템 | 정보의 고유구조를 반영하도록 그룹화하는 기능으로, 파일관리에 상당한 유연성 제공 |
뛰어난 통신기능 | TCP/IP에 기반한 통신기능을 운영체제 자체에 내장하고 있으며, 프로세스 간을 연결하는 파이프 기능이 있어서 명령어 간의 데이터 전달이 수월 |
다양한 기능의 유틸리티와 개발환경 제공 | 수백개의 명령어와 유틸리티를 제공 |
- 유닉스 운영체제 종류
구분 | 제품명 | 개발 회사 |
유닉스 | 오라클 솔라리스(Oracle Solaris) | Oracle(오라클) |
AIX | IBM | |
HP-UX | HP(휴렛팩커드) | |
리눅스 | Fedora(페도라) | RedHat(레드햇) |
Ubuntu(우분투) | Canonical(캐노니컬) |
(2) 구성
1) 커널(Kernal)
- 커널은 항상 메모리에 상주하여 CPU, 메인메모리, 하드디스크 등의 하드웨어 자원을 제어하면서 프로세스 스케줄링, 기억장치관리, 파일관리, 시스템호출 인터페이스, 입출력서비스 등의 기능을 사용자에게 제공한다.
- 시스템 호출(System Call) : 사용자 프로그램이 커널에 접근하는 인터페이스를 제공, 커널 내에서 서브루틴 형태로 존재
2) 셸(Shell)
- 명령어 해석기로서, 운영체제와 사용자가 대화하기 위한 기반을 제공하는 프로그램
3) 파일시스템(File System)
- 디렉터리 구조 : 유닉스 파일시스템은 디렉터리와 파일로 구성되어 있다. 디렉터리는 계층화된 트리구조를 가지며, 최상위 디렉터리는 루트(root)이다. 루트의 UID는 0
디렉터리 | 설명 |
/ | root 디렉터리로서 최상위 디렉터리이다. |
/etc | 시스템 환경설정 및 주요 설정파일을 담고 있다. ex) 패스워드, 호스트 등 |
/dev | 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수파일을 담고 있다. |
/usr/bin | 기본적으로 실행가능한 파일을 담고 있다. |
/usr/include | C언어 라이브러리 헤더파일이 저장되어 있다. |
/usr/lib | 기본 프로그램의 모듈을 담고 있다. |
/usr/sbin | 시스템 관리 명령어가 저장되는 디렉터리 |
/home | 사용자 홈 디렉터리가 저장되는 디렉터리 |
/tmp | 프로그램 실행 및 설치시 생성되는 임시파일을 담고 있다. 이 디렉터리에 파일 저장하면 재부팅시 임의로 삭제될 수 있다. |
/var | 시스템 로그가 저장되는 디렉터리 |
- 파일시스템 구조 : 파티션에 생성된 파일시스템은 부트 블록, 슈퍼 블록, i-node 리스트, 데이터 블록의 4가지 영역으로 분리된 자료구조를 갖는다. 파일시스템은 4가지 영역으로 구성된 자료구조를 제어함으로서 유지된다.
- i-node : 각 파일에 대한 정보를 기억하는 약 120byte의 고정된 크기 구조체. 파일에 대한 정보와 파일에 할당된 디스크 블록의 주소를 저장하는 필드들로 구성되어 있다.
- i-node : i-node 번호, 파일유형, 파일크기, 파일링크숫자, 소유주 UID/GID, 사용블록개수, 마지막 수정,접근,변경 시각
- 슈퍼 블록(Super Block) : 파일시스템 정보 유지하는 자료구조. 더 빠르고 효과적인 파일시스템 관리 가능하게 한다. 파일시스템 요약정보와 사용하지 않고 있는 i-node 및 디스크 블록의 위치정보도 가지고 있다.
2. 유닉스 기본 사용법
(1) 파일시스템 응용
1) 파일과 디렉터리 관리
- 디렉터리(파일) 정보 출력 : ls
파일유형 | 파일허가권 | 링크수 | 파일소유자이름 | 파일소유그룹이름 | 파일크기 | 마지막변경날짜 | 파일이름 |
- | 일반(정규)파일 |
d | 디렉터리 파일 |
l | 심볼릭 링크파일 |
b | 블록장치 특수파일 |
c | 문자장치 특수파일 |
p | 파이프, 프로세스간 통신에 사용되는 특수파일 |
s | 소켓, 네트워크 통신에 사용되는 특수파일 |
- 접근권한 부여 대상 : user(파일 만든 소유주), group(소유주가 속한 그룹 사용자), other(기타 사용자)
- 접근권한 종류(알파벳으로 기술하거나 숫자로 기술가능)
권한 | 파일 | 디렉터리 |
읽기 r(4) | 파일을 읽거나 복사할 수 있다. | ls 명령으로 디렉터리 목록을 볼 수 있다(실행 권한 필요). |
쓰기 w(2) | 파일을 수정, 이동, 삭제할 수 있다. | 파일을 생성하거나 삭제할 수 있다. |
실행 x(1) | 파일을 실행할 수 있다. | 파일을 디렉터리로 이동하거나 복사할 수 있다. |
2) 파일 권한 관리
- 접근권한 변경 : chmod
- 접근권한을 기호로 기술 : u(user), g(group), o(other), a(all), +(추가), -(제거), =(지정), r(읽기), w(쓰기), x(실행)
- 소유권 또는 그룹 변경 : chown(파일 및 디렉터리 소유자 및 소유그룹 변경)/chgrp(파일 및 디렉터리 소유그룹 변경)
(2) 프로세스 응용
- fork() : 실행시 자식 프로세스에게 부모의 코드, 자료, 스택 영역의 복사본이 할당된다.
- exec() : 실행시 자신의 현재 코드, 자료, 스택을 실행 가능한 다른 코드, 자료, 스택으로 치환
cf) 어떤 프로그램 xx 실행하는 새로운 프로세스 생성하려고 한다면, 기존 프로세스 복제하고 새로 생성된 자식 프로세스를 실행파일 xx와 연관시킨다. init은 모든 사용자 프로세스의 루트 부모 프로세스
- 프로세스 생성 및 종료와 관련된 규칙 : PID(프로세스 ID)가 0인 프로세스를 제외한 모든 프로세스는 실행 중에 부모 프로세스를 갖는다(부모 프로세스가 먼저 종료될 경우, PID 1번인 init 프로세스가 대리모 역할). 프로세스 종료시 부모 프로세스에게 자신의 종료를 알린다(부모 프로세스의 확인이 있을 때까지 좀비 프로세스로 남는다).
cf) 좀비 프로세스 : 실행 종료되었지만 아직 삭제되지 않은 프로세스. 코드, 자료, 스택 등 아무것도 가지지 않는다.
cf) 좀비 프로세스는 ps 명령어 실행 후 값이 Z로 표시되는 프로세스다. kill 명령어로 중지시키기
3. 유닉스 시스템 관리
(1) 시스템 시작과 종료
- 시스템에서 Run Level의 의미는 시스템의 운영 상태를 숫자 또는 문자로 표현한 것이다.
런 레벨 | 시스템 운영 상태 |
0 | PROM(Programmable Read-Only Memory) 모드 |
S, s | 시스템 싱글 유저 모드, 로컬 파일시스템이 마운트 되지 않은 상태 |
1 | 시스템 싱글 유저 모드, 로컬 파일시스템이 마운트 된 상태 |
2 | 멀티 유저 모드(NFS 클라이언트 모드) |
3 | 멀티 유저 모드(NFS 서버 모드), 유닉스 기본 런 레벨 |
4 | 사용 안함 |
5 | 시스템 power off 모드 |
6 | 시스템 리부팅 |
- init 명령어 다음에 런 레벨을 쓰면 해당 런 레벨로 이동할 수 있다.
- shutdown : 시스템 안전하게 종료할 때 사용하는 명령어
- 하드디스크 동기화(sync) : 하드디스크 입출력 효율성 높이기 위해 버퍼 운영, 무결성 문제 생기지 않도록 동기화 중요
(2) 파일시스템 관리
- mount : 보조기억장치에 설치된 파일시스템을 유닉스 시스템이 인식하도록 특정 디렉터리에 논리적으로 연결
- umount : 이전에 마운트 된 파일시스템의 연결을 해제한다.
(3) 프로세스 스케줄 관리
- cron 데몬 프로세스 : 유닉스 시스템에서 정기적인 작업을 지정시간에 처리하기 위해 사용
- crontab 파일구조 : 정기적으로 처리해야 하는 작업목록을 정의한 파일(*은 모든 값을 의미)
분 | 시 | 일 | 월 | 요일 | 작업 |
ex) 20 6 * * 1-5 : 매월 매일 월요일부터 금요일까지 6시20분에 처리
- cron 로그 파일은 /var/log/cron 에 저장된다.
- /etc/default/cron 파일은 cron 데몬 프로세스 실행될 때 읽는 파일로서 변수를 저장
4. 유닉스 서버 보안
(1) 시스템 보안
1) 사용자 패스워드 관리
- /etc/password 파일 : 시스템 관리자가 사용자 계정을 만들 때마다 해당 사용자와 관련된 정보를 저장( :으로 구분)
로그인ID | 비밀번호 | 사용자ID(UID) | 그룹ID(GID) | 사용자설명 | 홈디렉터리 | 로그인셸 |
- /etc/shadow 파일 : 암호화된 패스워드가 저장되어 관리자만 읽을 수 있도록 제한
사용자계정 | 암호화된 패스워드 | 마지막 패스워드 변경날짜 | 최소변경일수 | 최대변경일수 | 경고일수 | 최대비활성일수 | 만료날 |
2) 접근권한(umask)
- /etc/profile에 umask를 설정하여 전체 사용자에게 획일적인 umask값을 적용할 수 있다.
- 디렉터리의 기본값은 777, 파일의 기본값은 666이므로, umask는 기본값 - 원하는 상태가 된다.
3) 권한 상승(SetUID, SetGID)
- SetUID가 대문자 : S가 있는 경우에는 SetUID 설정되었지만 파일소유자에게 실행권한(x) 없는 경우
- SetUID가 소문자 : s가 있는 경우에는 SetUID 설정되었고 파일소유자에게 실행권한(x)도 있는 경우
- SetGID 부여된 파일도 소유그룹의 실행권한이 x에서 s로 변경된다.
4) 디렉터리 접근권한(sticky-bit)
- /tmp 같은 공유 디렉터리 이용시, 다른 사용자들이 파일 삭제하지 못하도록 파일생성자에게만 삭제권한 설정하는 것
(2) 네트워크 보안
1) 슈퍼 데몬(inetd 데몬)
- N개의 개별 서버를 하나로 통합하여 클라이언트로부터 서비스 요청이 올 때마다 해당 서비스와 관련된 실행 모듈을 실행해준다.
- inetd.conf 파일 구조
서비스 | 소켓타입 | 프로토콜 | 대기설정 | 로그인이름 | 서버 | 인자 |
- 데몬 실행모드 비교
구분 | xinetd 환경 서비스(리눅스) | standalone 서비스 |
의미 | xinetd 슈퍼데몬에 의해 제어되는 서비스 데몬 | 독립적으로 실행되는 서비스 데몬 |
실행방법 | 필요할때 xinetd에 의해 수행됨 | 독립적인 서비스를 위해 항상 독립적으로 수행됨 |
데몬상주여부 | 서비스 완료후에 종료됨 | 항상 메모리에 독립데몬으로 상주 |
접근제어 | tcpd에 의해 접근제어됨 | tcpd와 무관하지만, 자체 설정파일에 의해 접근제어 가능 |
기타 | /etc/xinetd.d/ 서비스명으로 된 xinetd 제어파일이 존재 ex) telnetd, ftpd 등 |
ex) httpd, sendmail, named 등 |
2) 접근통제(TCP-Wrapper)
- 외부에서 들어오는 클라이언트에 대해 접근통제 기능을 제공. 클라이언트 IP 주소를 확인하여 시스템관리자가 접근허용한 호스트들만 서비스를 허용하기 때문에 외부 해킹으로부터 시스템 보호가능
- /etc/hosts.allow 파일에 in.telneted : 192.168.0.171 작성하면 이 IP주소에 대한 텔넷 서비스 허용
3) PAM(Pluggable Authenitication Modules, 장착형 인증 모듈)
- 리눅스 배포판에서 사용자 인증의 핵심이며, 각 응용프로그램에 대한 인증 형태, 사용자 권한, 접근자원 등을 선택할 수 있는 라이브러리이다.
- 인증절차 : 각 프로그램은 인증이 필요한 부분에 PAM 라이브러리 호출 -> 해당 프로그램의 PAM 설정파일을 참조하여 등록된 여러 PAM 모듈들을 수행하고 결과를 응용프로그램에 반환 -> 응용프로그램은 이를 이용하여 인증여부를 결정
5. 리눅스(Linux)
(1) 개요
- 리눅스는 유닉스 타입의 운영체제로서 유닉스를 PC버전으로 개발하려 노력한 산물이다.
(2) 파일시스템
- minix : 파일시스템은 30문자로 제한되고, 파일시스템마다 최대 64MB의 성능제한이 있다.
- ext2(2차 확장 파일시스템) : 캐시에 저장되어 있는 데이터를 디스크로 저장하는 도중에 만약 시스템이 다운되거나 문제 발생할 경우 파일시스템이 손상되는 단점 있음.
- ext3(3차 확장 파일시스템) : ext2의 단점을 보완, 시스템 무결성 및 뛰어난 복구기능(저널링 기술)
6. 유닉스/리눅스 서버 취약점 분석 및 평가
(1) 계정 관리
- root 계정 원격접속제한
- 패스워드 복잡성 설정
- 계정잠금 임계값 설정(임계값을 5이하로 설정)
- 패스워드 파일 보호(/etc/shadow 활용)
- root 이외의 UID가 0 금지
- 패스워드 최소길이 설정
- 패스워드 최대사용기간 설정
- 패스워드 최소사용기간 설정
(2) 파일 및 디렉터리 관리
- root 홈, 패스 디렉터리 권한 및 패스 설정
- 파일 및 디렉터리 소유자 설정
- HOME/.rhosts, hosts.equiv 사용금지
<서버 보안 관리>
1. 서버 관리자의 업무
(1) 보안 유지 관리
- 로깅 정보를 감시하고 분석, 정기적으로 백업 수행, 정기적으로 시스템 보안을 테스트
- 로깅 : 이미 발생한 나쁜 일을 알려주기만 하는 반작용적 제어
(2) 서버관리자 업무
- 원격 접근권한 제거 : /etc/passwd 파일에서 /bin/bash과 같은 셸을 삭제
- wait : 프로세스가 끝나기를 기다리는 명령어
- nice : 프로세스 우선순위를 변경할 수 있는 nice값을 설정하는 명령어
- free : 시스템 실제 메모리와 스왑 메모리에 대한 사용현황을 확인할 수 있는 명령어
- du : 디스크의 파일 사용량을 재귀적으로 보여줌
- ifconfig : 통신디바이스 상태 보여줌
- netstat -an : 현 시스템에서 사용되는 통신서비스 상태 보여줌
- top : 시스템 자원(CPU, memory 등)의 사용현황 보여줌
- snoop : 네트워크를 흐르는 패킷을 캡처하여 분석
- nslookup : 도메인에 대한 IP정보 및 도메인 네임과 관련된 여러 검색이 가능
- traceroute : 특정 호스트까지의 네트워크 라우팅 경로 및 경유하는 IP 보여줌
2. 로그 설정과 관리
(1) 시스템 로그 분석
1) 로그에 대한 이해
- 윈도우는 이벤트(Event)라는 중앙집중화된 로그를 수집하여 저장, 유닉스는 로그를 여러 곳에 산발적으로 저장
- 따라서 윈도우는 로그 관리 편하다. 다만, 공격자가 한 로그만 삭제하면 되므로 위험
2) 윈도우 로그 분석과 설정
- 윈도우 시스템 이벤트 로그의 종류
이벤트 로그 | 설명 | 비고 |
응용프로그램 로그 | 응용프로그램이 기록한 다양한 이벤트가 저장되며, 기록되는 이벤트는 소프트웨어 개발자에 의해 결정됨 | AppEvent.Evt |
보안 로그 | 유효하거나 유효하지 않은 로그인 시도 및 파일 생성, 열람, 삭제 등의 리소스 사용에 관련된 이벤트를 기록. 감사로그 설정을 통해 다양한 보안 이벤트 저장 가능 | SecEvent.Evt |
시스템 로그 | 윈도우 시스템 구성요소가 기록하는 이벤트, 시스템 재부팅시 드라이버가 로드되지 않는 경우와 같이 구성요소 오류를 기록 | SysEvent.Evt |
디렉터리 서비스 로그 | 윈도우 Active Directory 서비스에 발생하는 이벤트 | |
파일 복제서비스 로그 | 윈도우 파일 복제서비스에서 발생하는 이벤트 | |
DNS 서버 로그 | 윈도우 DNS 서버에 발생하는 이벤트 |
- 윈도우 감사 정책(어떤 로그를 남길지 정의한 규칙)
종류 | 설명 |
개체(객체) 액세스 감사 | 특정 파일, 디렉터리, 레지스트리 키, 프린터 등과 같이 객체에 대하여 접근 시도하거나 속성 변경 등을 탐지 |
계정 관리 감사 | 신규 사용자, 그룹의 추가, 기존 사용자 그룹의 변경, 사용자 활성화나 비활성화, 계정 패스워드 변경 등을 감사 |
계정 로그인 이벤트 감사 | 계정의 로그인에 대한 사항을 로그로 남기는데, 이것은 도메인 계정의 사용으로 생성됨 |
권한 사용 감사 | 권한 설정 변경이나 관리자 권한 필요한 작업 수행할 때 로깅 |
로그인 이벤트 감사 | 로컬 계정의 접근시 생성되는 이벤트를 감사. 다양한 종류의 이벤트 확인가능 |
디렉터리 서비스 액세스 감사 | 시스템 액세스 제어목록이 지정되어 있는 액티브 디렉터리 개체에 접근하는 사용자에 대한 감사 로그 |
정책 변경 감사 | 사용자 권한 할당 정책, 감사 정책 도는 신뢰 정책 변경과 관련한 사항을 로깅 |
프로세스 추적 감사 | 사용자 또는 응용프로그램이 프로세스 시작하거나 중지할때 해당 이벤트 발생 |
시스템 이벤트 감사 | 시스템 시동과 종료, 보안 로그 삭제 등 시스템 주요한 사항에 대한 이벤트 |
- 로그 정책 설정 : [제어판]-[관리도구]-[로컬보안정책]-[감사정책]
- 이벤트 로그 파일 : %Windows%\system32\config 폴더 아래에 있는 .evt 확장자를 가진 파일
3) 유닉스/리눅스 로그 분석과 설정
- utmp(x) 파일 : utmp 데몬이 로그를 남김. 현재 시스템에 로그인한 사용자의 상태 기록. 텍스트가 아닌 바이너리 형태로 데이터 저장
- wtmp(x) 파일 : wtmp 데몬은 사용자의 로그인, 로그아웃, 시스템 재부팅 정보를 담는다. 텍스트가 아닌 바이너리 형태로 데이터를 저장. 로그내용은 last 명령어로 확인가능
- sulog : su 명령어 사용한 경우, 권한 변경에 대한 로그
- acct/pacct 로그 : 시스템에 로그인한 모든 사용자가 수행한 프로그램에 대한 정보를 저장하는 로그
- 유닉스의 경우 /var/adm/loginlog : 텍스트 파일로 되어 있으며, 실패한 로그 남김
- 리눅스의 경우 /var/log/btmp : 바이너리 파일로 되어 있으며, 실패한 모든 로그 남김. lastb 명령으로 확인가능
- lastlog : 가장 최근에 성공한 로그인 기록, 바이너리 파일로 되어 있음. lastlog 또는 finger 명령으로 확인가능
- history : 사용자별로 실행한 명령을 기록하는 로그
- ntp : 시스템간의 시간을 일정하게 맞춰주는 서비스(로그분석을 위해)
- xferlog : FTP 파일 전송 로그(메일X)
파일크기 | 파일이름 | 전송방법 | 특수동작 | 방향(O,I) | 접근계정 | 서비스이름(ftp) | 전송성공여부(c,i) |
4) 유닉스/리눅스 시스템 로그 설정
- /etc/syslog.conf 파일 : A B C -> A서비스에 대하여 B의 경우에 해당하는 경우 C 로그파일에 기록 남겨라(syslogd)
5) 로그 관리
- logrotate : 리눅스 시스템 로그파일 관리기. 시스템 로그파일에 대해 로테이트, 압축, 메일 발송해줌
(2) 응용프로그램 로그 관리
1) IIS(Internet Information Services) 웹서버 로그
- W3C 확장 로그파일 형식을 이용한다.
2) Apache 웹서버 로그
- 클라이언트 요청에 의해 웹서버가 응답한 내용을 액세스 로그파일에 기록되고, 클아이언트 요청에 의해 웹서버가 오류발생한 경우 에러로그에 기록된다.
- 아파치 웹서버는 httpd.conf 파일에서 LogFormat을 확인할 수 있다.
3. 공개 해킹도구에 대한 이해와 대응
(1) 크래킹 S/W
- 크래킹은 악의적인 목적을 가지고 시스템에 침입하는 행위, 쉐어웨어 프로그램을 정식버전으로 변환하는 행위를 의미
- John the Ripper : 패스워드 점검도구(윈도우, 리눅스, Mac 지원)
- pwdump : 윈도우에서 패스워드를 덤프할 수 있는 도구
- L0phtCrack : 패스워드 취약점 점검도구. 원격 및 로컬 서버나 PC에 대하여 패스워드 점검하는데 유용
- ipccrack : 사용자 계정 패스워드를 원격지에서 추측하여 취약점 점검하는 도구
- chntpw : 물리적 접근이 가능한 시스템에서 패스워드 리셋시키는 도구
- ERD Commander : 윈도우 시스템에서 패스워드 복구해야 하는 경우에 사용
(2) 키로그 S/W
- 키로그 프로그램은 설치된 컴퓨터에서 키보드로 입력한 정보를 로그로 남기는 프로그램이다.
- 키보드 해킹방지 프로그램을 통해 키보드 입력 자체를 보호할 수 있다.
4. 서버 보안용 S/W 설치 및 운영
(1) 취약점 분석 도구
- SATAN(Security Analysis Tool for Auditing Networks) : 해커와 같은 방식으로 시스템에 침입, 보안상의 약점을 찾아 보완할 수 있는 네트워크 분석용 보안관리도구이다.
- SARA : SATAN 기반, 유닉스에서 동작, 네트워크 기반 컴퓨터, 서버, 라우터 IDS 취약점 분석, HTML 형식 보고서 기능
- SAINT : 유닉스에서 동작, 네트워크 취약점 분석도구, HTML 형식 보고서 기능, 원격에서 취약점 점검 기능
- COPS : 유닉스에서 동작, 시스템 내부에 존재하는 취약점 점검도구, 취약한 패스워드를 체크
- Nessus : 클라이언트-서버구조로 클라이언트의 취약점 점검기능, 사용이 자유롭고 플러그인 업데이트 등이 쉽다. HTML 등 여러 형태로 결과를 리포트
- nmap : 포트 스캐닝 도구
(2) 무결성 점검
- tripwire : 파일 무결성 점검도구, 유닉스/리눅스에서 동작
(3) 스캔 탐지
- mscan : 메인 전체를 스캔, 주요 취약점을 한번에 스캔
- sscan : 유닉스/윈도우에서 동작, 네트워크를 통하여 취약점 점검도구, 공격용으로도 활용
- portsentry : 실시간으로 포트 스캔을 탐지하고 대응하기 위한 프로그램
(4) 침입 탐지 및 방화벽
- Snort : 실시간 트래픽 분석과 IP 네트워크에서의 패킷처리를 담당하는 IDS(침입탐지시스템). 프로토콜 분석, 콘텐츠 검색 및 조합 작업 가능, 유연한 언어사용으로 트래픽 분석하여 모듈화된 탐지엔진을 지원, 실시간 경고기능 지원
- TCP-Wrapper : 유닉스 기반의 방화벽 툴, 네트워크 서비스에 관련한 트래픽을 제어하고 모니터링 가능
- IPchain/IPtable : 패킷 필터링 방화벽
- IPfwadm : 리눅스 커널에서 IP 방화벽, 통계분석 규칙을 설정, 유지 감독하기 위한 도구
- DLP(데이터 유출 방지) : 내부 모든 문서의 중요한 자료에 대한 정보유출방지 목적(방화벽은 아님)
<각종 시스템 보안 위협 및 대응책>
- RPC(원격절차호출) : 분산처리시스템에서 다른 컴퓨터에서 동작하고 있는 프로그램 절차를 직접 불러내기, 버퍼오버플로우, DoS, 원격실행 등 다양한 취약점 존재
1. 버퍼 오버플로우(Buffer Overflow) 공격
(1) 개요
1) 개념
- 데이터 저장 영역에 할당된 용량보다 더 많은 입력이 위치하면 다른 정보를 변경할 수 있는 조건이다. 공격자는 이런 조건을 이용하여 시스템을 중지시키거나 시스템의 제어를 갖기 위해 특별한 코드를 삽입한다.
- 프로그램의 복귀주소를 조작, 궁극적으로 해커가 원하는 코드가 실행하게 하는 공격방법
2) 구조
- Text 영역 : 프로그램 코드와 상수가 정의되어 있고, 읽기만 가능한 메모리 영역
- Data 영역 : 전역변수와 정적변수가 저장되어 있는 영역
- Heap 영역 : 프로그래머의 필요에 따라 동적 메모리 호출에 의해 할당되는 메모리 영역
- Stack 영역 : 함수 인자 값, 함수 내 지역변수, 함수 반환주소 등이 저장되는 영역, 상위 메모리 주소에서 하위 메모리 주소로 데이터가 저장
(2) 스택 버퍼 오버플로우
- 보통 SetUID가 설정된 루트 권한의 프로그램을 공격대상으로 한다. 스택에 정해진 버퍼보다 큰 공격코드를 삽입하여 반환주소를 변경함으로써 임의의 공격코드를 루트권한으로 실행하도록 하는 방법이다.
- 저장된 데이터는 인접한 변수영역까지 침범하여 포인터 영역까지 침범하므로 해커가 원하는 특정 코드가 실행
- /etc/system 에서 set noexec_user_stack=1, set noexec_user_stack_log=1 로 수정
(3) 힙 오버플로우
- maloc 같은 메모리 할당 함수를 이용하여 프로그램을 사용할 때 할당하며 힙 영역을 오버플로우 시켜서 특정 코드를 실행
(4) 대응책
1) 컴파일 시간 방어
- 프로그램을 컴파일할 때 검사하여 버퍼 오버플로우를 방지하거나 발견하는 것을 목표로 한다.
- 경계값 체크나 파라미터 체크를 통해 방지
- 벤더에서 제공하는 소프트웨어 관련 패치를 적용
- 역공학 또는 프로그램 동작에 대한 관찰을 통해 발견하거나 교정한다.
- 최소권한으로 프로그램을 실행
- 언어확장과 안전한 라이브러리 사용
사용자제 함수 | strcat(), strcpy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprintf(), realpath() |
사용권장 함수 | strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf() |
2) 실행 시간 방어
- 존재하는 프로그램에서 공격을 발견하고 중지시키는 것을 목표로 한다.
- 주소공간의 임의추출(ASLR)
- NOP sled(NOP 썰매)
- 실행가능 주소공간 보호
2. 포맷 스트링 공격(Format String Attack)
(1) 개요
- printf(), fprintf(), sprintf()와 같이 포맷스트링을 사용하는 함수를 사용하는 경우, 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 포맷 문자열로 그대로 사용하는 경우 발생할 수 있는 취약점이다.
- 공격자는 포맷 문자열을 이용하여 취약한 프로세스를 공격하거나 메모리 내용을 읽거나 쓸 수 있다. 그 결과 공격자는 취약한 프로세스의 권한을 취득하여 임의 코드를 실행할 수 있다.
(2) 공격원리
- 테이터의 형태에 대한 불명확한 정의로 인한 것이다.
- %s는 문자 스트링을 말하는데, 이 값을 바꾸는 공격이다.
(3) 취약점의 위협요소
- 프로그램의 파괴, 프로세스 메모리 보기, 임의의 메모리 덮어쓰기
(4) 보안대책
- 포맷 문자열을 사용하는 함수를 사용할 때는 사용자 입력값을 직접적으로 포맷 문자열로 사용하거나 포맷 문자열 생성에 포함시키지 않는다.
3. 레이스 컨디션 공격(Race Condition Attack)
(1) 개요
- 레이스 컨디션은 둘 이상의 프로세스나 스레드가 공유자원을 동시에 접근할 때, 접근하는 순서에 따라 비정상적인 결과가 발생하는 조건/상황을 말한다.
- 레이스 컨디션 공격은 실행되는 프로세스가 임시파일을 만드는 경우, 악의적인 프로그램을 통해 그 프로세스 실행 중에 끼어들어 임시파일을 목적파일로 연결(심볼릭 링크)하여 악의적인 행위를 하는 것을 말한다.
(2) 파일 링크
- 하드 링크 : 똑같이 복사된 파일을 만드는 것이다. 하드 링크된 파일을 수정하면 원래 파일도 수정된다.
- 심볼릭 링크 : 실제 두 파일을 생성하여 링크하지 않는다. 단지 원본 파일 데이터를 가리키는 링크정보만 가져온다.
(3) 대응책
- 프로그램 로직 중에 임시파일을 생성한 후, 임시파일에 접근하기 전에 임시파일에 대한 심볼릭 링크 설정 여부와 권한에 대한 검사과정을 추가한다.
- 가능하면 임시파일을 생성하지 않는다.
- umask를 최하 022정도로 유지하여 임시파일이 공격자에 의해 악의적으로 삭제되지 않도록 한다.
4. 백도어(Back door) = 트랩도어
- 시스템 보안이 제거된 비밀통로로, 서비스 기술자나 유지보수 프로그래머의 접근 편의를 위해 시스템 설계자가 고의적으로 만들어 놓은 통로이다.
5. 시스템 서비스 거부 공격(DoS, Denial of Service) = 시스템 자원 고갈 공격
- 디스크 채우기, 메모리 고갈, 모든 프로세스 죽이기, 프로세스 무한 생성 방법 등이 있다.
6. 리버스 엔지니어링(Reverse Engineering)
(1) 개요
- 장치나 시스템의 구조를 분석하여 원리를 발견하는 과정을 말한다.
- 공격자는 리버스 엔지니어링을 통해 공격대상 시스템 또는 응용프로그램에 대한 분석을 수행할 수 있다.
(2) 대응책
- 프로그램 코드 난독화 : 대상에 따라 소스코드 난독화와 바이너리 난독화로 구분
7. 기타 시스템 보안위협 및 대응책
(1) 루트킷(rootkit)
- 루트킷은 시스템에 설치되어 그 존재의 흔적을 최대한도로 숨기면서 공격자가 언제든지 시스템에 관리자 권한으로 접근할 수 있도록 비밀통로를 지속적으로 유지시켜주는 일련의 프로그램 집합을 말한다.
- 기능 : 프로세스/스레드 감추기, 프로세스 보안설정 변경 및 제거, 파일/폴더 감추기, 레지스트리/서비스 감추기, 네트워크 정보 감추기, 스니핑 및 시스템 제어
(2) 논리폭탄(logic bomb)
- 논리폭탄은 특정 사건이 발생할 때 프로그램이나 일련의 코드를 실행한다.
(3) 원격관리프로그램(RAT)
- 공격자가 정상적인 인증과정을 거치지 않고 사용자 몰래 운영체제나 프로그램에 악의적으로 접근, 원격 제어
<최신 보안 주제들>
1. 블록체인(BlockChain)
(1) 개요
- 블록체인은 온라인 금융거래정보를 블록으로 연결하여 P2P 네트워크 분산환경에서 중앙관리서버가 아닌 참여자들의 개인 디지털 장비에 분산하여 저장시켜 공동으로 관리하는 방식이다.
- 기술적 특성 : 탈중앙화, 투명성, 불변성, 가용성
구분 | 퍼블릭 블록체인 | 프라이빗 블록체인 |
속도 | 느림 | 빠름 |
권한 | 모든 참여자가 읽기, 쓰기, 합의 등 권한 보유 | 구성원에 따라 사용가능한 권한 지정가능 |
사례 | 비트코인(가상화폐), 이더리움(가상화폐) | 코다(금융), 하이퍼레저(범용) |
(2) 블록체인 기반 기술
- 분산 네트워크 : 블록체인 정보는 네트워크에 참여하는 노드들이 가지고 있으며 동일한 거래내역이 분산저장 및 관리
- 암호기술 : 공개키 암호와 전자서명, 해시함수
- 이중 거래방지 : 악의적인 목적으로 동시에 두 곳 이상의 계좌로 송금하는 행위를 방지
- 합의 기법 : 작업증명(PoW), 지분증명(PoS)
(3) 블록체인 보안 위협요소
- 프라이버시 문제 : 블록체인에 저장된 데이터는 변조될 수 없기에, 블록에 저장된 개인정보 삭제할 수 없다. 분산시스템이므로 데이터에 대한 통제권을 상실할 수 있다.
- 키 도난 및 분실 : 공격자에게 도난당할 경우 정상 참여자로 위장한 공격자의 다양한 공격에 노출될 수 있다.
- 가용성 저하 : 참여자 급증하고 거래량 증가 및 누적됨에 따라 가용성 저하된다.
2. 사물인터넷(IoT, Internet of Things)
(1) 개요
- 정보통신기술을 기반으로 실세계와 가상세계의 다양한 사물들을 연결하여 진보된 서비스를 제공하기 위한 서비스 기반시설이다.
(2) 활용 사례
- 스마트홈 분야, 의료 분야, 교통 분야, 환경/재난 분야, 제조 분야, 건설 분야, 에너지 분야
3. 클라우드 보안
(1) 개요
- 클라우드 컴퓨팅은 이용자가 IT자원을 필요한 만큼 빌려서 사용하고 서비스 부하에 따라서 실시간 확장성을 지원받으며 사용한 만큼 비용을 지불하는 컴퓨팅 환경을 말한다.
- 환경
구축형(소유형) 환경 | 클라우드(공유형) 환경 |
많은 초기구매 비용 | 초기 투자비용 없음 |
인력, 패치, 업그레이드 등 높은 유지비용 | 낮은 유지비용 |
고정 용량 및 정해진 자원 할당 | 유연한 용량 및 효율적인 자원 할당 |
구매 및 설치 | 신청 후 빠른 서비스 이용 가능 |
지리적 한정 | 지리적 한정 없음 |
한정된 트래픽 처리 | 대규모 트래픽 수용가능 |
- 서비스 모델 : SaaS(응용S/W까지), PaaS(S/W개발환경까지), IaaS(가상화기술까지)
(2) 클라우드 컴퓨팅 기술
- 가상화 기술 : 단일 물리 IT자원을 논리적인 다수 IT자원으로 나누어 동시에 각 자원을 사용할 수 있게 해주는 기술
- 컨테이너 기술 : 리눅스 커널 기능인 cgroup과 namespace를 통해 서로 다른 애플리케이션 프로세스별로 공간을 격리
(3) SecaaS 서비스
- 서비스 제공자가 제공하는 보안서비스 패키지를 의미한다.
- CP(Cloud Provider)가 제공하는 SaaS의 일부이다.
- 서비스 종류 : 신원 및 접근관리, 웹 보안, 이메일 보안
4. 랜섬웨어(Ransomware)
(1) 개요
- 특징 : 랜섬웨어 대부분은 윈도우 운영체제를 설치한 컴퓨터를 감염. 주요 랜섬웨어에는 워너크라이, 로키, 크립트XXX, 케르베르, 크립토락커, 테슬라크립트 등이 있다.
구분 | 일반 악성코드 | 랜섬웨어 |
유포 | 웹사이트, 이메일, 네트워크 취약점 등 유포방식 동일 | |
감염 | S/W 취약점 또는 피해자의 실행으로 악성코드 감염 동일 | |
동작 | 정보 및 파일 유출, DDoS 공격 등 | 문서, 사진, MBR 등 데이터 암호화 |
치료 | 백신 등을 통해 악성코드 치료 | 백신 등을 통해 치료하더라도 암호화된 파일은 복구 어려움 |
피해 | 개인, 금융 정보유출 및 이를 이용한 2차 공격 | 복호화를 빌미로 가상화폐로 금전 요구 |
(2) 공격 및 대응
단계 | 공격 절차 | 대응 절차 |
1단계 | 감염 경로에 접속 | 증상 확인하기 |
2단계 | PC로 랜섬웨어 다운로드 및 실행 | 신고하기 |
3단계 | 암호화 대상 검색 및 암호화 | 복구하기 |
4단계 | 복호화 대가 요구 |
- 랜섬웨어 피해예방 5대 수칙(KISA) : 모든 소프트웨어 최신버전으로 업데이트, 백신 소프트웨어 설치하고 최신버전으로 업데이트, 출처가 불명확한 이메일과 링크는 실행하지 않기, 파일 공유 사이트 등에서 파일 다운로드 및 실행 주의, 중요자료는 정기적으로 별도로 백업하기
5. APT(Advanced Persistent Threat)
(1) 개요
- 지능형 지속 위협(APT)은 특정 대상을 겨낭해 다양한 공격기법을 이용하여 장기간 지속적으로 공격하는 것을 말한다.
- 제로데이 공격과 같이 기존에 알려지지 않았던 취약점을 이용한 공격을 한다.
- 특징 : 맞춤형 공격, 낮고 느리고 지속적인 공격, 구체적인 공격목표
- 공격 단계 : 목표대상에 대한 선행조사 끝에 이루어지는 침투, 프로파일링을 통한 전반적인 기업정보검색, 정보를 내려받을 수 있는 새로운 악성코드를 유포해 기밀정보 수집, 수집한 정보를 몰래 빼오는 유출
(2) 주요 침투 기법
- 스피어 피싱(Spear Pishing) 공격 : 특정 기관의 구체적인 개인 또는 그룹을 목표로 진행되는 목표지향적 피싱 공격
- drive-by-download 공격 : 목표로 삼은 조직의 구성원이 방문할 가능성이 높은 사이트를 미리 알아서 침해한 뒤 접속 즉시 악성코드가 다운로드 되도록 하는 공격
- Watering Hole 공격 : 공격자는 공격대상이 주로 방문하는 웹사이트에 대한 정보를 사전에 파악한 후 제로데이 취약점을 이용해 해당 사이트에 악성 코드를 심어둔다. 공격대상이 해당 사이트에 접근하게 됨녀 해당 악성코드에 감염된다.
- USB 메모리 스틱을 이용한 기법 : 공격자는 사전에 USB 메모리에 악성코드를 삽입, 특정 타겟 또는 조직의 이동 동선에 이를 방치한 후 누군가 가져가서 내부 PC에 연결하는 순간 감염되게 하는 방식
6. 기타 최신 보안주제들
(1) 사이버 킬 체인(Cyber Kill Chain)
- 사이버 공격 행위의 각 단계 중 하나만 차단되어도 전체 프로세스에 영향을 미치게 되어 해당 사이버 공격 실패한다.
- 록히드 마틴사 사이버 킬 체인 모델 : 정찰 -> 무기화 -> 전달 -> 취약점 이용 -> 설치 -> 명령 및 제어 -> 목표 실행
(2) 공급망 공격(Supply Chain Attak)
- 공급망이란 일반적으로 제품이나 서비스가 공급자로부터 소비자에게 전달되기까지의 시스템을 말한다.
- 공급망 공격이란 공급망에 침투하여 사용자에게 전달되는 S/W나 H/W를 변조하는 형태의 공격을 말한다.