Grsecurity

**grsecurity**는 보안 강화를 강조한 리눅스 커널 패치들의 집합이다. 이것은 일반적으로 웹 서버나 사용자들에게 셸 접근을 제공하는 시스템 같이 신뢰되지 않은 위치에서 원격 접속을 받는 컴퓨터 시스템들에서 사용된다.

## PaX
grsecurity 번들 중에서 주요한 요소는 PaX이다. 무엇보다도 데이터 메모리, 스택을 실행 불가능하게 또는 쓰기 불가능하게 표시하는 패치를 한다. 목적은 버퍼 오버플로 같은 많은 보안 취약점들을 예방하는데 도움을 주는, 메모리의 겹쳐쓰기 방지이다. PaX는 또한 쉽게 예측 가능한 메모리 주소에 의존한 공격들의 가능성을 감소시키기 위해 중요한 메모리 주소를 난수화하는 주소 공간 배치 난수화 (ASLR)를 제공한다. PaX는 grsecurity 개발자들에 의해 개발되지 않았다. 이것은 젠투 리눅스 등의 리눅스 배포판들에서 사용 가능하다.

## 역할 기반 접근 제어
grsecurity의 또 다른 주목할만한 요소로 역할 기반 접근 제어 (RBAC) 시스템의 완전한 제공이 있다. RBAC는 사용자들과 프로세스들이 정확히 동작하고 그 이상의 일을 하지 않게 하기 위한 절대 최소 권한을 갖는 완전한 최소 권한 시스템을 만들기 위한 목적을 위해, 일반적으로 유닉스 접근 제어 목록에 의해 제공되는 것보다 낮은시스템에 대한 접근을 제한하기 위해 고안되었다. 만약 시스템이 감염되면 이 방식은 공격자의 시스템에 대한 정보 획득과 파괴에 대한 능력을 대폭 감소시킬 수 있다. 각 역할은 할 수 있는 것과 없는 것에 대한 각 제한들을 가지며 이러한 역할과 제한들은 필요한 경우 수정될 수 있는 접근 정책을 형성한다.

RBAC 기능들 목록:

* 사용자와 그룹을 위한 도메인 지원
* 역할 변환 테이블
* IP-기반 역할들
* 특별한 규칙에 대한 비-root 접근
* 인증을 요구하지 않는 특별한 역할들
* 중첩된 주체
* 설정에서 변수들에 대한 지원
* 설정에서 변수들에 대한 And, or, 그리고 difference 집합 연산자들
* setuid 그리고 setgid 파일들의 생성을 제어하는 객체 모드
* 객체 모드들의 생성과 삭제
* 상속된 것의 커널 해석
* 실시간 정규 표현식 해결
* 특정한 프로세스들에 대한 ptrace 거부 능력
* 사용자와 그룹 변환 검사
* 커널 인증과 로그 학습을 위한 /dev/grsec 엔트리
* 설정 없이 전체 시스템을 위한 최소 권한 정책을 생성하는 코드
* gradm에 대한 정책 통계
* 상속 기반 학습
* 관리자의 상속 기반 학습을 활성화시키는 설정 파일 학습
* 부모 또는 문제가 되는 프로세스의 전체 경로 이름
* gradm을 위한 RBAC 상태 함수
* 주어진 프로세스를 시작한 개인의 원격 주소를 주는 /proc//ipaddr
* 안전한 정책 강화
* read, write, append, execute, view, 그리고 read-only ptrace 객체 허용 지원
* hide, protect, 그리고 subject flags 겹쳐쓰기 지원
* PaX flags 지원
* 공유 메모리 보호 기능
* 모든 알림에 대응하는 통합된 로컬 공격 대응
* 프로세스가 절대 트로이 코드를 실행할 수 없게 보장하는 Subject flag
* 완전한 기능의 감사
* Resource, socket, 그리고 capability 지원
* 무차별 대입 공격 익스플로잇에 대한 보호
* /proc/pid filedescriptor/memory 보호
* 존재하지 않는 파일/프로세스들에 대한 규칙들
* 주체와 객체들에 대한 정책 재생성
* 설정 가능한 로그 제거
* 설정 가능한 프로세스 설명
* 사람이 읽을 수 있는 설정
* 파일 시스템 또는 아키텍처에 의존하지 않는 특징
* 넓은 범위: 메모리가 다룰 수 있는 만큼의 많은 정책들을 지원
* 런타임 메모리 할당 거부
* SMP 안전
* 대부분의 연산들에 대한 O(1) 시간 효율성
* 추가적인 정책들을 명시하는 지시자 포함
* Enable, disable, reload 능력
* 커널 프로세스를 숨기는 선택지

## Chroot 제한
grsecurity는 여러 취약점들과 권한 확대 공격들을 예방하기 위해 다양한 방식으로 chroot를 제한한다. 다음은 추가적인 검사이다:

* chroot 외부의 공유 메모리에 대한 어태치 금지
* chroot 외부의 `[[kill]]`, `ptrace` (architecture-independent), `capget`, `setpgid`, `getpgid` 그리고 `getsid` 금지
* chroot 외부의 `fcntl`에 의한 시그널 보내기 금지
* chroot 외부의 프로세스 보기 금지, 심지어 이 마운트되었더라도
* 마운트 또는 재 마운트 금지
* `pivot_root` 금지
* 더블 chroot 금지
* chroot 외부의 `fchdir` 금지
* chroot에 대한 강제된 `[[chdir]]("/")`
* `(f)[[chmod]] +s` 금지
* `[[mknod]]` 금지
* `[[sysctl]]` 쓰기 금지
* 스케줄 우선 순위에 대한 상승 금지
* chroot 외부의 추상적인 유닉스 도메인 소켓 연결 금지
* cap을 통한 위험한 권한 제거

## 기타 기능
grsecurity는 또한 리눅스 커널에 대한 강화된 감사를 제공한다. 무엇보다도 사용자, 장치들의 마운팅/언마운팅, 시스템 시간과 데이터에 대한 변화, 그리고 `[[작업 디렉터리|chdir]]` 로깅이라는 특정한 그룹을 감사하기 위한 방식으로 설정될 수 있다. 다른 감사 타입들 중 몇몇은  거부된 자원 시도, 실패한 `[[포크 (시스템 호출)|fork]]` 시도와 IPC 생성, 삭제 그리고 `exec` 로깅을 관리자가 인자들과 함께 기록할 수 있게 한다.

신뢰된 경로 실행은 사용자가 root 사용자에 의해 소유되지 않은 바이너리를 실행하는 것을 예방하는데 사용되는 선택적인 기능이다. 이것은 사용자들로부터 자신의 악의적인 바이너리를 실행하는 것으로부터 그리고 실수로 악의적인 사용자에 의해 수정된 시스템 바이너리를 실행하는 것으로부터 방어한다.

grsecurity는 또한 chroot "jails"의 작동을 강화한다. chroot jail은 특정한 프로세스를 시스템의 나머지로부터 고립시키는데 사용될 수 있어서 서비스가 감염되었을 때 피해를 최소화시킬 수 있다. grsecurity가 방어하려고 하는 chroot jail의 탈출에 관한 여러 방식들이 존재한다.

또한 보안을 강화시키고 root 사용자에 대한 `[[dmesg]]` 와 `[[netstat]]` 명령어를 제한하는 것 같이 사용자가 시스템에 관한 불필요한 정보를 얻는 것을 막는 기능들도 존재한다.

다음은 추가적인 기능들과 보안 개선 사항들이다:

* 프로세스 소유자들에 대한 정보 누수를 막는 `/proc` 제한
* <code>/tmp</code> 레이스를 막는 심볼릭링크/하드링크 제한
* FIFO 제한
* `dmesg` 제한
* 신뢰하는 경로 실행의 구현 강화
* GID-기반 소켓 제한
* 로킹 메커니즘과 함께 거의 모든 옵션들이 `[[sysctl]]`-조정 가능하다.
* 모든 알림과 감사가 공격자의 IP 주소를 기록하는 기능을 지원한다.
* 로컬 연결들의 탐지: 공격자의 IP 주소를 다른 태스크로 복사한다.
* 무차별 대입 공격 익스플로잇의 자동적인 저지
* Low, medium, high, 그리고 custom 보안 수준
* 조정 가능한 로깅

## 같이 보기
* Exec Shield
* 리눅스 보안 모듈
* 보안 강화 리눅스

## 각주

## 외부 링크
* 
* Academic Research Publications Mentioning grsecurity/PaX
* 

분류:리눅스 보안 소프트웨어
분류:운영체제 보안