시스템 보안 구현하기
시스템 접근 통제 구현
원격 서비스
- 물리적으로 떨어져 있는 컴퓨터를 로컬 컴퓨터처럼 이용할 수 있게 하는 서비스
- 네트워크 연결을 통해 공유 컴퓨터의 자원을 이용할 수 있게 함
- 용도
> 초기 : 네트워크를 통한 컴퓨터의 자원을 공유하기 위한 방식으로 사용됨
> 현재 : 고객 지원, 원격 관리, 원격 제어의 목적으로 많이 사용됨
데몬 (Daemon)
- 시스템에 관련된 작업을 수행하는 Background Process를 통칭하는 용어
- 부팅 단계부터 지정된 데몬이 동작하여 서비스의 요청이 없을 때는 유휴 상태를 유지함
> 기본적인 시스템 자원을 소모하게 됨
Standalone 방식
- 각 서비스 Daemon이 항상 Standby 하고 있다가 서비스 요청이 오면 바로 작동 됨
- 자주 사용되는 Service에 사용
Super Daemon 방식
- Super Daemon 이 다른 Daemon들을 관리하는 형태
- Super Daemon만 Standby 하고 있다가 서비스 요청이 들어오면 해당 서비스 Daemon을 작동 시킴
- 자주 사용하지 않는 Service에 사용
xinetd 서비스
- inetd + tcpd에 추가된 보안기능을 수행하는 네트워크 슈퍼 데몬
- 확장 기능
> 각 서비스 별 환경설정 파일을 별도로 제공함 -> /etc/xinetd/서비스 명
> 서비스에 대한 접근 통제 -> TCP Wrapper 기능이 내장되어 있음
> Timeout, 접속 시간 기록
> 접속 시도 횟수 기록
> 로그 크기 제한 및 다양한 로그 제어 기능
Telnet
- TCP Port 23을 이용함
- 로그론을 통해 부여된 권한으로 원격 컴퓨터의 특정 프로그램 및 데이터를 이용함
- 기본적으로 평문 통신을 수행하므로 보안이 약한 서비스 -> 권장하지 않음
- Telnet Data 전송 방식
- Linux Telnet Server 패키지 설치 : #yum -y install telnet-server
- 환경 설정 파일 : /etc/xinetd.d/telnet
- 기본 환경 설정
> 서비스 활성화 -> disable = no
> 나머지 환경설정은 정책에 따라 구성함
> Telnet은 보안이 취약하기 때문에 root 계정 로그인을 금지하고 있음
ㄴ 해제 -> 허용 터미널 목록 파일을 삭제 또는 접근에 사용하는 터미널을 추가함
ㄴ #mv /etc/securetty /etc/securetty.bak
ㄴ #vim /etc/securetty -> pts/번호 추가
- 서비스 재시작 : #service xinetd restart
TCP Wrapper 선택적 접근통제
- /etc/hosts.allow -> 접근을 허가할 호스트 목록 파일
- /etc/hosts.deny -> 접근을 거부할 호스트 목록 파일
- 예제
> 모든 호스트에게 모든 서비스 거부
ㄴ (/etc/hosts.deny) ALL : ALL
> 172.16.10.30에게 모든 서비스 허용
ㄴ (/etc/hosts.allow) ALL : 172.16.10.30
> 172.16.10.10과 172.16.10.30에게 sshd 서비스만 허용
ㄴ (/etc/hosts.allow) sshd : 172.16.10.10,172.16.10.30
> 172.16.10.0/24 네트워크 대역에 모든 서비스 허용
ㄴ (/etc/hosts.allow) ALL : 172.16.10.0/255.255.255.0
ㄴ (/etc/hosts.allow) ALL : 172.16.10.
> 172.16.10.0/24 네트워크 대역에서 172.16.10.10을 제외하고 sshd 서비스만 거부
ㄴ (/etc/hosts.deny) sshd : 172.16.10.0/255.255.255.0 EXCEPT 172.16.10.10
암호학
- 암호에 관련된 일련의 기술
- 정보를 보호하기 위한 언어학적 및 수학적 방법론을 다루는 학문
- 암호학 용어
> 평문 : 정보(데이터)를 가지고 있는 원본
> 암호문 : 내용을 제3자가 판독할 수 없는 글자 / 숫자 / 부호 등으로 변경시킨 것
> 암호화 : 평문을 암호문으로 변경하는 것
> 복호화 : 암호문을 평문으로 변경하는 것
- 암호화의 기본 요소
> 평문
> 알고리즘 : 평문을 암호화, 암호문을 복호화 할 때 사용하는 일련의 순차적인 계산 절차
> 키 : 암호화의 임의성을 추가하기 위한 임의의 값
- 현대 암호화 기능
> 기밀성 보장 : 허가된 대상에게만 정보를 제공하는 것 -> 비밀 보장
> 부인 방지 : 정보를 송 / 수신한 대상을 확인함
> 인증 : 사용자 인증, 메시지 인증
- 현대 암호화의 종류
방향 | 종류 | 의미 |
단 방향 | Hash | 암호화만 수행됨 |
양 방향 | 대칭 | 암호화 / 복호화에 사용되는 키가 동일함 |
비대칭 | 암호화 / 복호화에 사용되는 키가 한 쌍으로 다른 키가 사용됨 | |
Hybrid | 키 교환은 비대칭 암호화, 데이터 전달은 대칭 암호화를 사용하는 방식 |
- 현대 암호화 강도 결정 요소 = key
> key의 길이
> key의 무작위성
> key의 복잡도
> key의 비밀성
인증서
- 공개키 동기화 과정에 발생할 수 있는 MITM 공격 취약점을 해결하기 위해 도입됨
- 공개키를 신뢰할 수 있는 제 3자(인증기관)의 서명으로 확인하는 증명서
> 전자서명
- 인증서의 기능
> 기밀성 : 허가되지 않은 대상에게 정보 노출을 막음
> 인증 : 정보의 소유주를 확인
> 무결성 : 정보의 변경 여부를 보장함
> 부인 방지 : 정보를 송 / 수신 받았음을 보장함
SSH
- telnet처럼 클라이언트와 서버와의 세션을 생성함
> shell 연결 뿐만 아니라 다양한 Application이 상위 계층에 존재할 수 있음
> 보안 세션을 제공하여 인증 및 데이터의 기밀성, 무결성을 보장함
- TCP Port 22 이용
- SSH 기본 동작 방식
- SSH Server 설정 파일 -> /etc/ssh/sshd_config
리눅스 방화벽
iptables
- iptables 실행 : #service iptables start
- Tables
> iptables를 통해 패킷을 제어할 기능
filter | - 정책에 일치하는 패킷을 target으로 전달하여 action을 수행함 - 주로 패킷의 허용 / 거부 할 때 사용함 - target -> ACCEPT, REJECT, DROP, LOG, 사용자 정의 chain ... |
nat | - 정책에 일치하는 패킷의 주소를 변화하는 동작을 수행함 - target -> SNAT, DNAT, MASQUERADE, REDIRECT ... |
mangle | - 정책에 일치하는 패킷의 필드 값을 변경함 - 주로 데이터 전송 경로 변경, 우선순위 값 변경 등에 사용됨 - target -> MARK, ACCEPT, TOS ... |
- Table 조회 명령어
> filter Table (기본값) : #iptables -L
> nat Table : #iptables -t nat -L
> mangle Table : #iptables -t mangle -L
Chain
filter Table | |
INPUT | 목적지가 호스트인 패킷에 대한 필터링 |
OUTPUT | 출발지가 호스트인 데이터에 대한 필터링 |
FORWARD | 호스트를 경유하는 데이터에 대한 필터링(라우터 용도) |
nat Table | |
PREROUTING | targer -> DNAT 외부에서 내부로 향하는 데이터의 주소 변조 패킷의 목적지 주소를 변환 |
OUTPUT | 로컬에서 생성된 데이터를 내보내기 직전에 변환 수행 패킷의 목적지 주소를 변환` |
POSTROUTING | target -> SNAT, MASQUERADE 내부에서 외부로 향하는 데이터의 주소 변환 패킷의 출발지 주소를 변환 |
mangle Table | |
INPUT | 목적지가 호스트인 패킷 변경 |
OUTPUT | 출발지가 호스트인 패킷 변경 |
FORWARD | 호스트를 경유하는 패킷 변경 |
PREROUTING | 패킷이 라우팅 되기 전에 변경 |
POSTROUTING | 패킷이 라우팅 된 후에 변경 |
- iptables 명령어
> #iptables [-t 테이블 이름] <Command> [Chain 이름] [parameters 옵션] [-m 확장 모듈] [모듈 옵션] [target]
[target 옵션]