💡 요약 미리보기
정보 보안 개요
- 정보 보안의 3대 요소는 기밀성, 무결성, 가용성이다
- 정보 보안 전문가는 윤리 의식, 다양한 분야의 지식, 관련 법규 이해가 필요하다
시스템 및 네트워크 보안
- 시스템 보안은 계정, 세션, 접근 제어, 권한, 로그, 취약점 관리 등을 포함한다
- 네트워크 보안 위협에는 DoS, DDoS, 스니핑, 스푸핑, 세션 하이재킹 등이 있다
웹 및 코드 보안
- 웹 보안 취약점으로는 명령 삽입, 인증 및 세션 관리 취약점, XSS, CSRF 등이 있다
- 코드 보안에서는 버퍼 오버플로우, 포맷 스트링 공격, 메모리 해킹 등에 주의해야 한다
모바일 및 악성 코드
- iOS와 안드로이드는 서로 다른 보안 체계를 가지고 있으며, 각각의 취약점이 존재한다
- 악성 코드는 프로그램 실행에 필요한 메모리를 직접 조작하여 공격하는 방식이다
1장: 정보 보안의 세계
01. 정보보안의 역사
구분 내용
1950년대 이전 | 암호화 기계 에니그마, 최초의 컴퓨터 콜로서스, 콜러서스 개발자이자 최초의 해커인 앨런 튜링 |
1960년대 | 최초의 컴퓨터 연동망(네트워크) ARPA, 유닉스 운영체제 개발, 전화망 해킹으로 무료 장거리 전화 시도 |
1970년대 | 최초의 이메일 전송, 마이크로소프트 설립, 애플 컴퓨터 탄생, C언어 개발 |
1980년대 | 네트워크 해킹 시작, 카오스 컴퓨터 클럽, GNU와 리처트 스톨먼, 해커 잡지인 <프랙>과 <2600>, 케빈 미트닉, 모리트 웜, <해커 선언문> |
1990년대 | 데프콘 해킹 대회, 트로이 목마, 백 오리피스 |
2000년대 | 분산 서비스 거부(DDoS)공격 이후로 야후, CNN, 아마존 사이트 마비, 슬래머 웜으로 인한 인터넷 대란, 웜 삼총사(베이글 웜, 마이둠 웜, 넷스카이 웜) 등장, 개인 정보 유출과 도용, 전자 생거래 교란, 지능적 지솝 위협(APT)공격에 의한 금융 해킹 |
2010년대 | 농협 사이버 테러, 해킹의 대상이자 도구가 된 스마트폰, 가상 화폐 해킹 |
02. 보안의 3대 요소
기밀성
인가된 사용자만 정보 자산에 접근할 수 있도록 하는 것
무결성
적절한 권한을 가진 사용자가 인가한 방법으로만 정보를 변경할 수 있도록 하는 것
가용성
정보 자산에 대해 필요한 시점에 접근이 가능하도록 하는 것
03. 보안 전문가의 자격 요건
- 윤리 의식
- 진정한 정보 보안 전문가는 반드시 올바른 윤리 의식을 갖추어야 함
- 정보보안 전문가가 참고할 보안 관련법
- 정보통신망 이용촉진 및 정보보호 등에 관한 법률, 정보통신기반 보호법, 개인정보 보호법, 클라우드컴퓨팅법, 전자정부법 등
- 다양한 분야의 지식
- 정보 보안 전문가: 운영체제, 네트워크, 프로그래밍, 서버, 보안 시스템, 모니터링 시스템, 암호, 정책과 절차 등 다양한 분야에서 전문성을 갖춰야 함
2장: 시스템 보안
01. 시스템 보안 주제
- 계정 관리 : 적절한 권한을 가진 사용자를 식별하여 인증하는 관리
- 세션 관리 : 사용자와 시스템 사이 또는 두 시스템 사이의 활성화된 접속에 대한 관리
- 접근 제어 : 시스템에 대한 네트워크 관점의 접근 통제
- 권한 관리 : 시스템의 각 사용자가 적절한 권한으로 적절한 정보 자산에 접근할 수 있도록 통제
- 로그 관리 : 시스템에 영향을 미치는 관련 사항을 기록하여 관리
- 취약점 관리 : 시스템 자체의 결함에 대한 관리
02. 보안 인증 방법
- 알고 있는 것 : 패스워드와 같이 머릿속으로 기억하고 있는 정보를 이용하여 인증 수행
- 가지고 있는 것 : 신분증, OTP 장치 등으로 인증 수행
- 스스로의 모습 : 홍채와 같은 생체 정보 이용
- 위치하는 곳 : 콜백 등 사용자의 위치 정보 이용
03. 시스템별 관리자 계정
- 윈도우: administrator
- 유닉스(리눅스): root
- MS-SQL: sa(system administrator)
- 오라클: sys, system
04. 세션 관리
- 세션 하이재킹, 네트워크 패킷 스니핑을 막기 위해 암호화 적용
- 지속적인 인증을 통해 세션의 유효성 검증
05. 접근 제어
- 주요 네트워크 서비스와 관리자 인터페이스 목록 파악, 네트워크 서비스별로 IP를 통한 접근 제어 수행
- TCP Wrapper를 통한 접근 제어 가능
06. 운영체제 권한
- 윈도우 : 모든 권한, 수정, 읽기 및 실행, 디렉터리 내용 보기, 읽기, 쓰기
- 유닉스(리눅스) : 읽기(r), 쓰기(w), 실행(x)
07. 데이터베이스에서 DCL을 이용한 권한 부여 구조
08. 뷰
- 참조 테이블의 각 열에 대한 사용자의 권한 설정을 간편하게 관리하기 위한 가상 테이블
09. AAA
Authentication(인증)
자신의 신원을 시스템에 증명하는 과정
Authorization(인가)
지문이나 패스워드 등을 통해 로그인이 허락된 사용자로 판명되어 로그인하는 과정
Accounting
로그인했을 때 시스템이 이에 대한 기록을 남기는 활동
10. 윈도우와 유닉스의 로그 종류
윈도우 로그 설명
개체 액세스 감사 | 특정 파일이나 디렉터리, 레지스트 키, 프린터 등와 같은 객체에 대해 접근을 시도하거나 속성 변경 등 탐지 |
계정 관리 감사 | 신규 사용자, 그룹 추가, 기존 사용자/그룹 변경, 사용자 비/활성화, 계정 패스워드 변경 등 감사 |
계정 로그인 이벤트 감사 | 로그온 이벤트 감사와 마찬가지로 계정의 로그인에 대한 사항을 로그로 남김. 전자는 도메인 계정을 사용할 때 생성, 후자는 로클 계정을 사용할 때 생성 |
권한 사용 감사 | 권한 설정 변경이나 관리자 권한이 필요한 작업을 수행할 때 로깅 |
로그인 이벤트 감사 | 로컬 계정의 접근 시 생성되는 이벤트 감사. 계정 로그온 이벤트 감사에 비해 다양한 종류의 이벤트 확인 가능 |
디렉터리 서비스 액세스 감사 | 시스템 액세스 제어 목록(SACL)이 지정되어 있는 액티브 디렉터리 개체에 접근하는 사용자에 대한 감사 로그 제공 |
정책 변경 감사 | 사용자 권한 할당 정책, 감사 정책, 신뢰 정책의 변경과 관련된 사항 로깅 |
프로세스 추적 감사 | 사용자 또는 응용 프로그램이 프로세스를 시작하거나 중지할 때 해당 이벤트 발생 |
시스템 이벤트 | 시스템의 시작과 종료, 보안 로그 삭제 등 시스템이 주요한 사항에 대한 이벤트를 남김 |
유닉스 로그 설명
utmp | 현재 로그인한 사용자의 아이디, 사용자 프로세스, 실행 레벨, 로그인 종류 등을 기록 |
wtmp | 사용자 로그인, 로그아웃 시간, IP와 세션 지속 시간, 시스템 종료와 시작 시간 기록 |
secure(sulog) | 원격지 접속 로그와 su(swtich user), 사용자 생성 등과 같이 보안에 직접적으로 연관된 로그 저장 |
history | 명령 창에서 실행한 명령 기록 |
syslog | 시스템 운영과 관련한 전반적 로그 |
11. 데이터베이스의 로그 종류
- MS-SQL: 일반 로그인 감사, C2 감사 추적
- 오라클: 문장, 권한, 객체 감사
12. 취약점 관리
- 패치, 응용 프로그램별 고유 위험 관리, 응용 프로그램의 정보 수집 제한 등
13. 모바일 운영체제의 역사
OS 내용
팜 OS | 1996년에 개발된 운영체제. 주소, 달력, 메모장, 할 일 목록, 계산기, 개인정보를 숨기기 위한 간단한 보안 툴 포함 |
윈도우 CE | PDA나 모바일 장치 등에 사용하기 위해 만든 운영체제. 1MB 이하의 메모리에서도 동작 가능. 1996년 초기 버전인 윈도우 CE 1.0 출시 |
블랙베리 OS | RIM이 만든 뫄일 운영체제. 메시지와 이메일 전송 기능 및 보안 초점. 2000년에 블랙베리 5790 모델을 시작으로 블랙베리 명칭이 사용됨 |
iOS | 애플의 아이폰과 아이패드에 사용되는 모바일 운영체제. 2007년에 출시된 아이폰 오리지널의 운영체제로 시작 |
안드로이드 | 구글과 이동통신 관련 회사 연합체가 개발한 개방향 모바일 운영체제. 2007년에 HTC Dream(T-Mobile G1) 구글폰에 안드로이드 1.0이 탑재된 것이 시초 |
14. iOS와 안드로이드 보안 체계 비교
구분 / iOS / 안드로이드
운영체제 | Darwin UNIX에서 파생하여 발전한 OS X의 모바일 버전 | 리눅스 커널(2.6.25)을 기반으로 만들어진 모바일 운영체제 |
보안 통제권 | 애플 | 개발자 또는 사용자 |
프로그램 실행 권한 | 관리자(root) | 일반 사용자 |
응용 프로그램 서명 | 애플이 자신의 CA를 통해 각각의 응용 프로그램을 서명해 배포 | 개발자 서명 |
샌드박스 | 프로그램 간 데이터 통신 엄격히 통제 | iOS에 비해 상대적으로 자유롭게 앱 실행 가능 |
부팅 절차 | 암호화 로직으로 서명된 방식에 의해 안전한 부팅 절차 확보 | |
소프트웨어 관리 | 단말 기기별 고유한 소프트웨어 설치 키 관리 |
15. iOS와 안드로이드의 취약점
- iOS
- 탈옥한 iOS기기에서 대부분 발생
- root의 패스워드가 ‘alpine’으로 설정되어있음
- 탈옥된 iOS에서 SSH 서버를 실행하며 로컬 또는 원격지에서 로그인 가능
- 안드로이드
- 사용자가 보안 수준 선택 가능
- 자유로운 운영체인 만큼 바이러스와 악성 코드 유포됨, 그에 따른 백신 보급
16. 모바일 기기 보안 문제점
- 이동성 : 모바일 기기의 뛰어난 이동성으로 인해 공격을 받을 때보다 공격에 사용될 때의 문제 소지가 더 큼. 이를 악용해 워드드라이빙으로 좀 더 넓은 영역이나 쉽게 접근하기 어려운 곳의 무선 랜까지 공격 가능
- 블루투스 : 무선으로 다양한 장치 등을 연결하는 기술. 여러 가지 장치가 작은 규격과 적은 전력으로 접근하기 때문에 높은 수준의 암호화와 인증을 구현하기 어려워 위험 노출될 가능성 有
- 블루프린팅 : 서비스 발견 프로토콜(SDP)을 통해 블루투스 장치를 검색하고 모델 확인
- 블루스나프 :OPP기능을 사용해 블루투스 장치에 있는 주소록, 달력 등의 내용을 요청해 열람. 취약한 장치의 파일 접근 가능
- 블루버그 : 공격자가 10~15m 정도의 거리에서 블루투스 기기에 전화 걸기, 블특정 번호로 SMS 보내기, 주소록 읽기 및 쓰기 등 실행 가능
3장: 네트워크 보안
01. OSI 7계층
7계층: application (응용 프로그램)
- 응용 프로세스와 직접 관계해 일반적인 응용 서비스 수행
6계층: persentation (표현)
- 코드 간의 번역 담당
- 사용자 시스템에서 데이터 구조를 통일하여 응용 프로그램 계층에서 데이터 형식의 차이로 인해 발생하는 부담 절감
5계층: session (세션)
- 양 끝단의 응용 프로세스가 통신 관리 방법 제공
4계층: transport (전송)
- 양 끝단의 사용자들이 신뢰성 있는 데이터를 주고받게 함으로써 상위 계층이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않게 함
3계층: network (네트워크)
- 여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할
- 다양한 길이의 데이터를 네트워크를 통해 전달, 전송 계층이 요구하는 서비스 품질(QoS)을 위해 기능/절차적 수단 제공
2계층: data link (데이터 링크)
- 두 지점 간의 신뢰성 있는 전송을 보장하기 위한 계층
- 16진수 12개로 구성된 MAC 주소 사용
1계층: physical (물리)
- 실제 장치를 연결하기 위한 전기/물리적 세부 사항을 정의한 계층
- 랜선 등 포함
02. TCP의 3-웨이 핸드셰이킹과 연결 해제 과정
3-웨이 핸드셰이킹 (연결설정과정)
연결 해제 과정
03. 서비스 거부 공격(Dos)
- 취약점 공격형
- 공격 대상이 특정 형태의오류가 잇는 네트워크 패킷의 처리 로직에 문제가 있을 때 그것을 이용하여 오작동을 유발하는 공격 형태
- 보잉크/봉크/티어드롭 공격, 랜드마크 공격
- 자원 고갈 공격형
- 네트워크 대역폭이나 시스템의 CPU, 세션 등의 자원을 소모시키는 공격
- 랜드 공격, 죽음의 핑 공격, SYN 플러딩 공격, HTTP GET 플러딩 공격, HTTP CC 공격, 동적 HTTP 리퀘스트 플러딩 공격, 슬로 HTTP 헤더 Dos(슬로로리스) 공격, 슬로 HTTP POST 공격, 스머프 공격, 메일 폭탄 공격 등
04. 분산 서비스 거부 공격(DDoS)
- 공격자가 광범위한 네트워크를 이용해 다수의 공격 지점에서 동시에 한 곳을 공격하는 형태의 서비스 거부 공격
- 공격자, 마스터, 에이전트 구성
- 자동화된 툴을 이용하여 증폭된 형태의 서비스 거부 공격 수행
05. 스니핑 공격
- 일반적으로 작동하는 IP 필터링과 MAC 주소 필터링을 수행하지 않고, 랜 카드로 들어오는 전기적 신호를 모두 읽은 뒤 다른 이의 패킷을 관찰하여 정보 유출
- ping,ARP, DNS, 유인, ARP watch를 이용해 스니퍼 탐지 가능
06. 스푸핑 공격
- 스푸핑 공격의 대상: MAC 주소, IP 주소, 포트 등 네트워크 통신과 관련된 모든 것이 될 수 있음
- 시스템 권한 얻기, 암호ㅗ하된 세션 복호화하기, 네트워크 트래픽 흐름 변환 등 다양하게 나타남
- ARP 스푸핑 공격, IP 스푸핑 공격, ICMP 리다이렉트 공격, DNS 스푸핑 공격 등
07. 세션 하이재킹 공격
- 두 시스템 간의 연결이 활성화된 상태, 즉 로그인된 상태를 가로채는 공격
- 서버와 클라이언트가 TCP를 이용하여 통신하고 있을 때 RST 패킷을 보내어 일시적으로 TCP 세션을 끊고 시퀀스 넘버를 새로 생성하여 세션을 빼앗아 인증을 회피하는 형태
08. 무선 네트워크 보안
- 물리적인 보안 유지, 관리자 패스워드 변경
- SSID 브로드 캐스팅 금지
- WEP 암호화: 128비트 키까지 암호화 키 제공
- WPA-PSK 암호화: WEP 암호화의 취약점을 해결한 암호화 방식 제공
- EAP와 802.1x 암호화 : EAP - 무선 랜 클라이언트와 RADIUS 서버 간의 통신을 가능하게 하는 프로토콜 802.1x - 포트에 대한 접근 통제
4장: 웹 보안
01. HTTP
- HTTP Request
- GET 방식: 요청 데이터의 인수를 웹 브라우저의 URL을 통해 전송
- POST 방식: URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송
- HTTP Response
- 200번대(성공): 클라이언트의 요구가 성공적으로 수신 및 처리됨
- 500번대(서버 측 에러): 서버 자체에서 발생한 오류 상황이나 요구사항을 제대로 처리할 수 없을 때
02. 웹 서비스 언어
- 프론트엔드
- HTML 기반의 정적인 웹 서비스, JS를 이용한 동적인 웹서비스 통칭
- 모두 클라 측 웹 브라우저에 이해 해석 & 적용
- 백엔드
- 클라의 요청에 따라 웹 서비스에 필요한 요청 결과만 전송
03. 웹 프록시를 통한 취약점 분석
- 웹 프록시: 웹의 구조 파악, 취약점 점검시 or 웹 해킹을 할 때 사용하는 툴
- 일반적으로 웹 해킹에 사용되는 웹 프록시는 클라에 설치되고 클라의 통제를 받음
- 클라가 웹 서버와 웹 브라우저 간에 전달되는 모든 HTTP 패킷을 웹 프록시를 통해 확인하면서 수정 가능
04. 구글 해킹을 통한 정보 수집
검색 인자 설명 검색 추가 인자
site | 특정 도메인으로 지정한 사이트에서 검색하려는 문자열이 포함된 사이트 찾기 | 0 |
filetype | 특정 파일 유형에 한해 검색하는 문자가 들어 있는 사이트 찾기 | 0 |
link | 링크로 검색하는 문자가 들어 있는 사이트 찾기 | x |
cache | 특정 검색어에 해당하는 캐시된 페이지 보여줌 | x |
intitle | 페이지 제목에 검색하는 문자가 들어 있는 사이트 찾기 | x |
inurl | 페이지 URL에 검색하는 문자가 들어 있는 사이트 찾기 | x |
05. 웹의 주요 취약점
취약점 종류 설명
명령 삽입 취약점 | • 클라이언트의 요청을 처리하기 위해 전송받는 인수에 특정 명령을 실행하는 코드를 포함해 웹 서버에 전송하고 실행 |
• 웹 서비스가 예외적인 문자열을 적절히 필터링하지 못하는 경우에 발생 | |
• ex) SQL 삽입 공격 | |
인증 및 세션 관리 취약점 | • 취약한 패스워드 설정 |
: 취약한 인증의 가장 대표적인 문제점은 패스워드 설정, 웹을 비롯해 패스워드를 사용하는 모든 운영체제와 응용 프로그램에 공통 해당 | |
• 사용자 데이터를 이용한 인증 | |
: 데이터 신뢰도에 대한 증명 권한을 클라에 넘기면 클라가 권한 악용 가능 | |
XSS 취약점 | • 공격자가 작성한 스크립트가 다른 사용자에게 전달됨 |
• 다른 사용자의 웹 브라우저 안에 적절한 검증 없이 실행되기 때문에 사용자의 세션을 탈취하거나 웹 사이트를 변조하고 악의적인 사이트로 이동 가능 | |
취약한 접근 제어 | • 관리자 페이지가 추측하기 쉬운 URL이거나 인증이 필요한 페이지에 대한 인증 미처리로 인해 인증을 우회하여 접속할 수 있는 취약점 |
• 인증 우회를 막으려면 중요 페이지에 접근할 때 사용자 세션 값(쿠키) 검증 | |
보안 설정 오류 | • 디렉터리 리스팅: 웹 브라우저에서 웹 서버의 특정 디렉터리를 열면 그 디렉터리에 있는 파일과 목록이 모두 나열됨 |
• 백업 및 임시 파일 존재: 공격자는 개발자가 남겨둔 백업 파일이나 임시 파일을 통해 중요한 정보 획득 가능 | |
• 미흡한 주석 관리: 주석에는 여러 가지 정보가 기록되므로 주의 요망 | |
민감한 데이터 노출 | • 데이터의 중요도에 따라 암호화 로직 사용, 데베 테이블 단위에서 암호화 수행해야 함 |
공격 방어 취약점 | • 웹 앱에서 공격의 탐지, 로깅, 응답 및 공격 시도 차단을 수행해야 함 |
CSRF 취약점 | • 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격 |
취약점이 있는 컴포넌트 사용 | • 사용하려는 컴포넌트, 라이브러리 등의 보안 취약점이 무엇인지 충분히 검토해야 함 |
취약한 API | • 보안에 취약한 API사용은 보안 문제를 초래할 수 있으므로 충분한 검토 요망 |
06. 웹의 취약점 보완
- 특수 문자 필터링
- XSS 취약점 공격: < > & “ ?
- SQL 삽입 공격: = ; * . .. - -
- XSS 취약점 공격 & SQL 삽입 공격: ‘
- XSS 취약점 공격 & 디렉터리 탐색 공격: /
- 서버 통제 적용
- 지속적인 세션 관리
5장: 코드보안
01. 메모리의 기본 구조
- 스택: 프로그램 로직이 동작하기 위한 인자와 프로세스 상태 저장
- 힙: 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장
02. 80x86 CPU의 주요 레지스터
03. 셸
- 운영체제를 둘러싸고 있으면서 입력 받는 명령어를 실행하는 명령어 해석기
04. 프로세스 권한과 SetUID
- 각 계정에는 고유한 UID가 있는데, SetUID가 부여된 프로그램을 실행할 대는 다음과 같이 임시로 권한을 ㅏ바꿀 수 있음
05. 버퍼 오버플로 공격
- 데이터의 길이에 대한 불명확한 정의를 악용한 덮어쓰기로 발생
- 정상적인 경우에는 사용되지 않아야 할 주소 공간, 즉 원래는 경계선 관리가 적절하게 수행되어 덮어쓸 수 없는 부분에 해커가 임의의 코드를 덮어쓰는 공격
- 버퍼 오버플로 공격의 대응책 중 하나는 버퍼 오버플로에 취약한 다음과 같은 함수를 사용하지 않는 것
- strcpy(char *dest, const char *src);
- strcat(char *dest, const char *src);
- getwd(char *buf);
- gets(char &s);
- fscanf(FILE *stream, const char *format, …);
- scanf(const char *format, …);
- realpath(char *pth, char resolved_path[]);
- sprintf(char *str, const char *format);
06. 포맷 스트링 공격
- 데이터 형태에 대한 불명확한 정의로 발생
- 버퍼 오버플로 공격처럼 ret 값을 변조해 임의의 코드 실행 가능
07 포맷 스트링 문자 종류
파라미터 특징
%d | 정수형 10진수 상수(integer) |
%f | 실수형 상수(float) |
%lf | 실수형 상수(double) |
%s | 문자 스트링((cosnt)(unsigned) char *) |
%u | 양의 정수(10진수) |
%o | 양의 정수(8진수) |
%x | 양의 정수(16진수) |
%s | 문자열 |
%n | *int(쓰인 총 바이트 수) |
%hn | %n의 절반인 2바이트 단위 |
08. 메모리 해킹
- 프로그램 동작에 관여하지 않고, 프로그램이 실행되는 데 필요한 정보를 저장해둔 메모리를 직접 조작하여 프로그램 실행에 관여하는 공격 방법