1) 정보 보안의 역사
- 1950년대 이전
에니그마: 평문 메시지를 암호화된 메시지로 변환하는 장치
=> 전쟁시 암호화를 하며 사용했지만, 컴퓨터로 해독이 가능해짐
- 1960~ 1970년대
해킹과 컴퓨터가 직접적 연관을 맺으며 발전
=> ARPA/ 유닉스 운영채제 개발/ 이메일 프로그램 개발/ 마이크로소프트 설립/ 애플 컴퓨터 탄생
- 1980~ 1990년대
해킹의 종류, 사건 발생이 다양해지고 그 수가 증가
=> 네트워킹 해킹 시작/ 정보 권리 논쟁 시작/ 해킹 문화 등장/ 해킹 도구 등장
- 2000년대 이후
컴퓨터가 대중화되며, 방화벽이나 백신이 보급됨.
=> 다양한 해킹 공격/ 바이러스/ 개인정보 유출, 도용/ 전자상거래 증가
2) 정보 보안의 이해
(1) 보안의 3대 요소
- 기밀성: 인가된 사용자만 정보 자산에 접근 가능
=> 방화벽/ 암호/ 패스워드- 무결성: 적절한 권한을 가진 사용자가 인가한 방법으로만 정보 변경 가능
=> 정부가 아닌 개인이 위조지폐를 만든다거나...- 가용성: 필요한 시점에 정보 자산에 대한 접근이 가능
=> 24시간 편의점
(2) 보안 전문가의 자격 요건
- 다양한 범죄 유형에 대한 학습 필요 (사이버 테러형 범죄, 일반 사이버 범죄...)
- 윤리 의식 => 범죄에 사용하지 않을 것
- 다양한 분야의 지식 (네트워크, 웹, DB 등)
1) 시스템 보안의 이해
(1) 시스템
- 시스템= 하드웨어+ 소프트웨어 +a
(2) 시스템 보안 주제
- 시스템 보안: 비인가자가 파일, 폴더, 장치 등을 사용하지 못하게 제한해 시스템을 보호하는 기능
- 계정 관리
- 세션 관리
- 접근 제어
- 권한 관리
- 로그 관리
- 취약점 관리
2) 계정 관리
- 계정 관리: 적절한 권한을 가진 사용자 식별
기본 구성 요소: 아이디, 패스워드
식별: 아이디로 가능하지만, 정확한 식별을 위해서는 인증이 필요함
인증방법
- 알고 있는 것: 기억하고 있는 정보로 인증
- 가지고 있는 것: 신분증/ OTP이용
- 자신의 모습: 홍채, 지문 등
- 위치하는 곳: 위치의 적절성, 콜백 이용
** 콜백: 접속을 요청한 사람의 신원을 확인하고 본인인증 진행
(1) 운영체제의 계정 관리
- 운영체제: 시스템을 구성하고 운영하기 위한 가장 기본적인 소프트웨어
=> 권한을 가지게 되면 해당 시스템에서 동작하는 다른 응용 프로그램에서도 권한을 가질 수 있음운영체제 관리자로부터 응용 프로그램에 있는 정보를 보호하는 방법= 응용 프로그램 암호화
- 윈도우의 계정 관리
- Administrator: 윈도우에서 운영체제의 관리자 권한을 가진 계정
윈도우 시스템의 모든 권한을 가지고 있음
시스템에 가장 기본으로 설치되는 계정
사용자 계정을 만들거나 없앨 수 있으며 디렉터리와 프린터를 공유하는 명령을 내릴 수 있음
사용 가능한 자원에 대한 권한 설정 가능
- net localgroup administrators 명령: 관리자 그룹에 속하는 각 계정의 존재 형태 확인 가능
- net users 명령: 사용자 계정 모두 확인
- net localgroup 명령: 시스템에 존재하는 그룹 목록 확인- Power Users: Administrators 그룹이 가진 권한을 대부분 가지지만 로컬 컴퓨터에서만 관리할 능력도 가짐
해당 컴퓨터 밖의 네트워크에서는 일반 사용자로 존재- Backup Operators: 윈도우 시스템에서 시스템 파일을 백업하는 권한을 가지고 있음
로컬 컴퓨터에 로그인하고 시스템을 종료할 수 있음- Users: 대부분의 사용자가 기본으로 속하는 그룹으로, 여기에 속한 사용자는 네트워크를 통해 서버나 다른 도메인 구성 요소에 로그인할 수 있음. 관리 계정에 비해 한정된 권한을 가지고있음
- Guests: Users 그룹과 같은 권한
네트워크를 통해 서버에 로그인할 수 있으며 서버로의 로컬 로그인은 금지
- 유닉스의 계정 관리
root: 기본 관리자 계정
- /etc/passwd: 계정 목록 확인 가능
root : x : 0 : 0 : root: /root: /bin/bash
사용자 계정, 암호화된 패스워드의 저장 위치, 사용자 번호, 그룹 번호, 실제 이름, 사용자의 홈 디렉토리 설정, 사용자의 셸 정의
- 관리자 권한은 사용자번호와 그룹 번호로 식별됨 (관리자는 0, 0)
- 암호화된 패스워드의 저장 위치와 사용자의 셸 정의를 확인하면 일반 사용자 계정도 확인가능
- /etc/group
root : x : 0 : root
그룹 이름, 그룹에 대한 패스워드, 그룹 번호, 해당 그룹에 속한 계정 목록
- root를 제외한 그룹은 모두 임의로 생성, 고유 권한 없음
- 계정이 보안상 문제 되는 경우: 계정을 가지고 있을 필요가 없는 사람이 계정을 가지고 있는 경우 => 계정 생성, 삭제시 적절한 승인절차가 필요
(2) 데이터베이스의 계정 관리
- 데이터베이스 계정이 고유의 계정을 가지기도, 운영체제와 계정을 공유하기도 함
=> 어떻든 운영체제의 관리자 권한에 의해 노출, 통제되는 경우가 많음
- sa: MSSQL의 관리자 계정
- sys, system: 오라클의 관리자 계정
(3) 응용 프로그램의 계정 관리
- FTP/ 웹 서비스: 고유의 계정을 가지기도, 운영체제와 계정을 공유하기도 함
** FTP: 파일 전송 프로토콜- TFTP: 인증이 필요한 별도의 계정이 존재하지 않아 더욱 조심해야함
** TFTP: 간단한 파일 전송 프로토콜
(4) 네트워크 장비의 계정 관리
- 네트워크 장비는 보통 패스워드만 알면 접근이 가능함
=> 패스워드를 이용해 일반 사용자 모드와 관리자모드 접근 가능- 네트워크 장비에서도 계정 생성은 가능한데
- 대규모 네트워크의 경우 계정 관리의 어려움때문에 통합된 계정관리를 위해 추가로 TACACS+같은 솔루션을 적용하기도 함
** TACACS+: 유닉스 시스템에서 시스템에 접근하는 사용자 인증 프로토콜... 모든 패킷을 암호화함
3) 세션 관리
세션: 사용자와 시스템/ 두 시스템 사이의 활성화된 접속
일정시간이 지나면 세션을 종료하고, 비인가자의 세션 가로채기 통제
- 세션 하이재킹, 네트워크 패킷 스니핑 대응
** 세션 하이재킹: 다른 사람의 세션 상태를 훔치거나 도용하여 액세스하는 해킹방법
네트워크 패킷 스니핑: 네트워크 주변을 지나다니는 패킷을 엿보는 행위- 세션에 대해 지속적인 인증 (시스템+ 웹서비스 +a)
- 한 사용자가 인증 절차를 거쳐 시스템에 접근하는데 성공한 뒤 재접근을 한다면, 재인증을 수행해야 함 = 지속적인 인증
ex) 윈도우의 화면보호기, 인터넷 뱅킹의 패스워드 반복 입력, 패스워드 기간 만료 이후 재설정 요구 등- 데이터베이스에서는 일반적으로 세션에 대한 타임아웃을 적용하지 않음 (대부분 시스템 간의 세션을 가지고 있기 때문, 타임아웃이 있다면 시스템간 통신이 없을 때 사람이 다시 연결해주어야 함)
4) 접근 제어
= 다른 시스템으로부터 적절히 보호할 수 있도록 네트워크 관점에서 접근 통제 (인가자만 시스템 사용 가능)
시스템 및 네트워크에 대한 접근 제어의 가장 기본적인 수단: IP, 서비스 포트
(1) 운영체제의 접근 제어
- 윈도우 운영체제: 터미널 서비스, GUI 관리용 툴
- 유닉스 운영체제: 텔넷, SSH, XDMCP, FTP
=> 운영체제에 대한 접근 제어를 가능하게 하는 관리 인터페이스- 접근 제어를 수행할 부분을 최소화해야 효율적인 보안 정책을 적용할 수 있기 때문에, 불필요한 인터페이스는 제거하는 것이 좋음
- 불필요한 인터페이스를 제고할 때는 사용할 인터페이스에 보안 정책을 적용할 수 있는지를 판단해야 함
ex) 텔넷은 스니핑, 세션 하이재킹 공격에 취약하기에 사용 지양- 접근 제어 정책 적용: IP를 통해 수행
ex) 텔넷은 TCPWrapper, 윈도우는 방화벽 등을 통해 접근 제어 가능
** TCPWrapper: 유닉스 환경에서 해킹을 차단하는 프로그램
(2) 데이터베이스의 접근 제어
- 데이터베이스는 핵심 응용 프로그램으로서 적절한 접근 제어가 필수이지만,
모든 데이터베이스가 접근 제어 수단을 제공하진 않음
ex) 오라클, MySQL, MS-SQL 등이 접근 제어 수단 제공
- 오라클: $ORACLE_HOME/network/admin/sqlnet.ora
( IP접근 차단/ 허용)- MySQL: 명령 사용
- MS-SQL: 방화벽 이용
(3) 응용 프로그램의 접근 제어
- 응용 프로그램의 목적에 따라 접근제어 제공 여부가 달라짐
- IIS, NGINX: IP에 대한 접근 제어 제공
** IIS, NGINX: 웹서비스 제공- SSL: 클라이언트와 서버 인증서 이용해 접근 제어 제공
** SSL: 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술
(4) 네트워크 장비의 접근 제어
- IP에 대한 접근 제어 가능
- 관리 인터페이스에 대한 접근 제어 (유닉스의 접근 제어와 유사)
- ACL을 통한 네트워크 트래픽 접근 제어 (방화벽 통한 접근 제어와 유사)
** ACL: 방화벽, 웹 사이트 등에서 사용자가 정보에 대해 어떤 권한을 가지는지 정해 놓은 목록
5) 권한 관리
= 각 사용자가 적절한 권한으로 적절하게 정보 자산에 접근할 수 있도록 통제
(1) 운영체제의 권한 관리
- 윈도우의 권한 관리
NTFS: 윈도우의 기본 파일 시스템
모든 권한, 수정, 읽기 및 실행, 디렉터리 내용 보기, 읽기, 쓰기에 대해 권한 설정 가능- 권한에 대한 규칙
- 접근 권한 누적: 개별 사용자가 여러 그룹에 속하면 특정 파일이나 디렉터리에 대한 접근 권한이 누적됨 (+)
- 파일 접근 권한> 디렉터리 접근 권한
- 거부> 허용: 허용권한 없음 !=거부, 권한이 중첩되어 적용되므로 그 중 명백한 거부가 설정되어있으면 거부가 우선적용
(2) 유닉스의 권한 관리
- 파일, 디렉터리에 대해 권한 설정 방법이 같음
- 소유자/ 그룹/ 소유자도 그룹도 아닌 사용자로 구분해 읽기/ 쓰기/ 실행 권한 부여 가능
2) 데이터베이스의 권한 관리
(1) 질의문에 대한 권한 관리
- DDL: 데이터 구조를 정의하는 질의문
- CREATE: 데이터베이스 객체 생성
- DROP: 데이터베이스 객체 삭제
- ALTER: 기존 데이터베이스 객체 재정의
- DML: 데이터 검색, 수정 처리 질의문
- SELECT: 사용자가 테이블이나 뷰의 내용을 읽고 선택
- INSERT: 데이터베이스 객체에 데이터 입력
- UPDATE: 기존 데이터베이스 객체에 있는 데이터 수정
- DELETE: 데이터베이스 객체에 있는 데이터 삭제
- DCL: 권한 관리 관련 질의문
- GRANT: 데이터베이스 객체에 권한 부여
- DENY: 사용자에게 해당 권한 금지
- REVOKE: 이미 부여된 데이터베이스 객체의 권한 취소
=> DDL, DML은 DCL에 의해 허용/ 거부됨
(2) 뷰에 대한 권한 권리
** 뷰: 참조 테이블의 각 열에 대해 사용자의 권한을 설정하는 것이 불편해 만든 가상 테이블
=> 테이블에 대한 권한 설정과 기본적으로 같지만 접근권한 영역이 달라 관리가 더 쉬워짐
(3) 응용 프로그램의 권한 관리
- 일반적으로 관리자 계정과 일반 사용자 계정으로 나눠 관리
- 응용 프로그램을 실행한 계정의 권한을 물려받기 때문에 권한 악용문제 발생 가능
- 악용문제 막기 위해서 윈도우 IIS에서는 실행 프로세스 권한을 별도로 만들어서, 유닉스에서는 nobody같은 제한된 계정 권한을 사용해야함
6) 로그 관리
= 로그: 시스템 내부나 네트워크를 통해 외부에서 시스템에 어떤 영향을 미칠 경우의 내용 기록
- AAA: Authentication (인증), Authorization (인가), Accounting
- Authentication (인증): 자신의 신원을 시스템에 증명하는 과정
ex) 아이디와 패스워드 입력- Authorization (인가): 로그인이 허락된 사용자로 판명되어 로그인하는 과정
- Accounting: 로그인했을 때 시스템이 기록을 남기는 활동
=> 모든 시스템에 존재하며, 이에 대한 로그 정보는 시스템에 접근한 사용자를 추적하는데 이용될 수 있음
- 책임추적성: 추적에 대한 기록의 충실도로, 높을수록 로그가 자세하게 남음
- 감사 추적: 보안과 관련해 시간대별 이벤트를 기록한 로그
(1) 운영체제의 로그 관리
- 윈도우: 중앙 집중화된 형태로 로그를 수집해 저장
=> 로그 관리는 편하지만 보안수준은 낮음
- 로그종류:
- 객체 액세스 감사: 특정 파일, 프린터와같은 객체 접근 시도/ 속성변경 시도 탐지
- 계정 관리 감사: 사용자/ 활성화 변경여부, 패스워드 변경 등 탐지
- 계정 로그인 이벤트 감사: 계정의 로그인에 대한 탐지
- 권한 사용 감사: 권한설정 변경, 관리자 권한 필요 작업 수행 탐지
- 로그인 이벤트 감사: 로컬 계정이 접근했을 때 생성되는 이벤트 감시
- 디렉터리 서비스 액세스 감사: 시스템 액세스 제어 목록이 지정되어있는 액티브 디렉터리 개체에 접근하는 사용자에 대한 탐지
- 정책 변경 감사: 사용자 권한 할당 정책, 감사 정책 등의 변경 탐지
- 프로세스 추적 감사: 사용자, 응용프로그램의 활성화/ 비활성화 탐지
- 시스템 이벤트: 시스템의 시작, 종료 등 시스템의 주요한 사항
- 유닉스: 로그를 여러곳에 나누어 저장
=> 로그 관리는 어렵지만 보안수준은 높음
- 로그 종류:
- utmp: 현재 로그인한 사용자의 아이디, 로그인 종류 등 탐지
바이너리 형식으로 로그 저장- wtmp: 사용자 로그인/ 아웃 시간, IP, 시스템 시작/ 종료 시간 탐지
- secure (sulog): 원격자 접속 로그, 사용자 생성 등과 같이 보안에 직접적으로 연관된 로그 탐지
일반적으로 텍스트 형식으로 저장
[날짜] [시간] [+(성공)/ -(실패)] [터미널 종류] [권한 변경 전 계정 - 변경 후 계정]
- history: 명령창에서 실행한 명령에 대한 탐지
- syslog: 시스템 운영돠 관련한 전반적인 로그 탐지
(2) 데이터베이스의 로그 관리
- 데이터베이스는 데이터를 요청하는 일이 빈번하기 때문에 로그인 외에는 따로 로그를 남기지 않음
- MS-SQL, MySQL, 오라클 등 다양한 데이터베이스에서 로그 기능을 지원하기 때문에, 필요에 따라 조작해 사용하면 됨
- 데이터베이스 모니터링: 데이터베이스 자체가 아닌 모니터링 툴을 따로 설치하면 로그를 쉽게 남길 수 있고 관리도 쉬워짐
ex) 네트워크 트래픽 모니터링 가능한 태핑장비
(3) 응용 프로그램의 로그 관리
- 웹서버: 날짜, 시간, IP, 서버포트 등의 로그를 제공
웹서버 로그 분석을 통해 취약점을 알아낼 수있기 때문에 중요- FPS 서버
(4) 네트워크 장비의 로그 관리
- 네트워크에서는 많은 양의 트래픽이 생성되고, 그 트래픽은 대부분 일시적이기 때문에 찾을 수 있는 로그가 다양하지 않음
- 네트워크 보안 시스템의 로그: 침입 차단 시스템, 침입 탐지 시스템, 침입 방지 시스템 등 다양한 보안 시스템의 로그 확인 가능
- 네트워크 관리 시스템의 로그: 네트워크 트래픽 모니터링 시스템과 네트워크 관리 시스템의 로그 참고 가능
- 네트워크 장비 인증 시스템의 로그: 인증서버를 통해 네트워크 장비에 대한 인증 시도 및 로그인 정보 확인 가능
** 로그 서버 운영시 공격자의 흔적 찾기도 조금 더 쉬워짐
7) 취약점 관리
취약점 관리: 시스템 자체이 결함을 체계적으로 관리
(1) 패치관리
- 시스템 자체에 취약점이 존재하면 막기 힘들기 때문에, 운영체제 등의 응용프로그램을 만든 제작사에서 제공하는 패치/ 서비스팩을 적용해야 함
ex) 시스템 업데이트 관리
(2) 응용 프로그램별 고유 위험 관리
- 응용 프로그램 중에는 운영체제의 파일이나 명령을 실행할 수 있는 응용프로그램이 존재 (함수 등)
=> 그 프로그램의 적절성을 검토한 뒤 사용하는 것이 중요
ex) MS-SQL의 확장 저장 프러시저 (xp_cmdshell)
(3) 응용 프로그램의 정보 수집 제한
- 응용 프로그램의 기능이 운영체제의 정보를 노출시키기도 하기 때문에 , 해당 기능을 파악한 후 제한하는 것이 필요
(4) 불필요한 서비스, 악성 프로그램 확인 후 제거 관리
8) 모바일 보안
(1) 모바일 운영체제 보안
- iOS: 기본적 통제권은 애플이 소유
- 보안체계:
- 안전한 부팅 절차 확보: 무결성 확인 후 동작
- 시스템 소프트웨어 개인화: 각각의 기기에 설치된 각각의 고유한 코드 값으로 버전을 관리해 임의의 프로그램이 설치되거나 변경되는 것을 통제
- 응용 프로그램에 대한 서명: 설치 가능한 모든 앱에 코드 무결성 사인을 등록하게 하고, 원격지 삭제 권한을 가짐
- 샌드박스 활용: 데이터 전송 등에 제한
** 샌드박스: 응용 프로그램이 실행될 때 원래의 운영체제와 완전히 독립되어 실행되는 형태- 멀티태스킹 금지 (음악 듣기 제외)
- 원격지에서 iOS 로그인 금지
- 취약점: 탈옥 기기의 경우 정보 유출 가능
- 안드로이드: 리눅스 커널 기반의 공개적인 운영체제
- 보안체계:
- 응용 프로그램의 권한 관리: 모든 응용 프로그램은 일반 사용자 권한으로 실행되며 접근시 사용자 동의를 받음
- 응용 프로그램의 서명: 설치 가능한 모든 앱에 개발자가 서명 (응용 프로그램에 대한 통제권은 개발자가 가짐)
- 샌드박스 활용: 특정 형태를 갖추어 권한을 요청하는 것을 허용
- 취약점: 리눅스 운영체제와 유사한 보안 취약점을 그대로 가짐
( 앱 마켓 여러개, 루팅 (탈옥)가능,
(2) 모바일 기기 보안
- 이동성: 모바일 기기의 특성상 이동성이 뛰어나기 때문에 공격에 사용될 수 있음
ex) 워드라이빙: 노트북에 수신율이 좋은 안테나를 연결하고 차에 탄 채 보안이 취약한 무선랜을 탐색하며 해킹 시도
- 블루투스: 여러 장치가 작은 규격에 적은 전력으로 연결되기에 높은 수준의 암호화나 인증 구현이 어려움
- 블루프린팅: 블루투스 공격 장치의 검색 활동
- 블루스나프: 블루투스의 취약점을 이용해 장비의 임의파일에 접근하는 공격
- 블루버그: 블루투스 장비 간의 취약한 연결 관리를 악용한 공격 (공격 장치와 공격 대상 자치를 연결해 공격 대상 장치에서 임의의 동작 실행.
한번 연결되면 이후 다시 연결하지 않아도 된다는 점을 이용해 공격)