다음 이전 차례

7. 커널 보안

이것은 보안에 관련된 커널 조정 옵션들과 이 것들이 무엇을 하는 지에 대한 설명과 어떻게 사용하는 지에 대한 설명이다.

커널이 여러분 컴퓨터 네트워크 업무를 관리하므로, 커널을 매우 안전하도록 관리하는 것과 커널 자체의 보안이 깨지지 않도록 하는 것은 중요한 것이다. 최신 네트워킹 공격법의 일부를 방지하기 위해서는 커널의 버전을 최신의 것으로 관리해야 한다. 새로운 커널은 ftp://ftp.kernel.org/이나 디스트리뷰션 제작자의 사이트에서 찾을 수 있다.

또한 주로 쓰이는 리눅스 커널에 쓸 수 있도록 통일된 암호화 패치를 제공하는 국제 그룹도 있다. 이 패치는 (미국의) 수출 제한 조치 때문에 리눅스 커널에 끼워 넣을 수 없었던 여러 가지 암호화 서브시스템을 지원해 준다. 정보는 http://www.kerneli.org에서 구할 수 있다.

7.1 "2.0 커널"의 컴파일 옵션

2.0.x 커널에서는 다음의 옵션들을 쓸 수 있고, 커널 구성 단계 (Kernel Configuration Process)에서 볼 수가 있을 것이다. 아래에 설명되어 있는 대부분은 ./linux/Documentation/Configure.help 문서에 적혀 있고, 이 문서는 커널 컴파일 옵션을 실행할 때 make config 단계에서 도움말로 사용되고 있다.

"2.2 커널"의 컴파일 옵션

2.2.x 커널들은 옵션이 대부분 똑같지만, 새로운 옵션이 몇 가지 새로이 개발되어 있다. 아래에 설명되어 있는 대부분은 커널을 컴파일하는 중의 make config 단계에서 도움말 (Help facility)로 사용되는 /linux/Documentation/Configure.help 문서와 내용이 같다. [23] 새로 추가된 옵션들 만 아래에 적어 놓았다. 다른 필요한 옵션을 알고 싶으면 2.0 설명을 보기 바란다. 아마도 2.2 커널에서 가장 의미 있는 변화는 IP 방화벽 코드일 것이다. IP 방화벽을 설치하기 위해서 2.0 커널에서는 ipfwadm 풀그림이 사용되었지만, 2.2 커널에서는 ipchains 풀그림이 사용되고 있다.

7.2 커널 디바이스들

리눅스에는 보안에 도움이 되는 몇 개의 블록 디바이스와 문자 디바이스가 있다.

/dev/random/dev/urandom의 두 디바이스는 랜덤 데이타를 언제라도 만들어 낼 수 있도록 커널에서 제공된다.

/dev/random/dev/urandom 둘은 보안상 안전한 (secure) 난수 발생 기능이 필수적인 PGP 열쇠의 제작, ssh 수하 도전용 (challenge), 그리고 기타 풀그림들 등에 사용될 수 있을 만큼 충분히 안전해야 한다. 공격자가 -- 이 두 기능에서 발생된 숫자들의 조합을 미리 알고 있다고 해서 -- 그 다음의 나올 숫자를 알아내는 일이 가능해서는 안된다. 이 둘로부터 생성되는 숫자들이 진정한 의미로서의 난수가 되도록 보장하는 많은 노력들이 쏟아 부어지고 있다.

두 디바이스의 차이점이라면 /dev/random은 무작위의 바이트들로 만들어지며, 무작위의 바이트들이 만들어 쌓이는 동안은 대기 상태가 된다는 정도일 것이다. 일부 시스템에서는 새로운 사용자 생성 입력 (user-generated entry)이 시스템에 등록되는 시간이 오래 걸릴 수 있고, 그 동안은 (사용이) 막혀 있을 수 있다는 것을 말하고 싶다. /dev/random을 쓰기 전에는 심사숙고하기를 바란다. (아마도 제일 좋은 방법은 형성이 되고 있는 사이에 -- "OK 충분합니다" 하는 메시지가 나올 때까지 -- 사용자들이 키보드를 두들기게 끔 하는 것일 것이다)

/dev/random은 -- 인터럽트 사이의 시간을 재서 만드는 등의 -- 질이 높은 엔트로피이다. 이것도 랜덤 데이타가 충분히 만들어질 때까지 막고 있게 된다.

/dev/urandom은 비슷하지만, -- 엔트로피가 낮을 때의 경우 -- 암호학 기법 상 강하다고 할 수 있는 헤쉬 값을 만들어 준다. 비록 이것은 (/dev/random으로 만들어지는 값에 비하면) 상대적으로는 덜 안전하지만, 대부분의 풀그림용으로는 충분하다.

다음과 같은 방법 등으로 디바이스로부터 읽어 낼 수 있다.

          root#  head -c 6 /dev/urandom | mimencode
이것은 -- 패스워드를 만듦에 적절할 -- 8자의 난수를 콘솔로 출력할 것이다. mimencode는 메타 메일 패키지에서 볼 수 있을 것이다.

연산법에 대한 설명은 /usr/src/linux/drivers/char/random.c에 있다. 내가 (데이브) 이 것을 쓰는데 도와준 디어도어 와이 쭤, 존 루이스 그리고 리눅스 커널 팀 여러분에게 감사드린다.


다음 이전 차례