[여기보기] etc 디렉터리에 있는 소중한 아이들

| 2022-08-29

[여기보기]는 “여기서 보안의 기본을 챙기고 가자”의 약자로, 개발 과정에서 꼭 최소한으로 챙기면 좋을 보안 기초 설정을 앞으로 하나씩 공유할 예정입니다. 기초 내용이 주를 이루겠지만, 혹시라도 빼먹고 계신 것이 없는지 가끔 한 번씩 둘러봐 주세요.

안녕하세요, 넷마블 보안실 보안개발팀 정승현입니다. 

우리는 카테고리를 구분할 때, ‘~ 등’에 속하지 않는 나머지를 ‘기타’라고 분류해 묶어두는 용도로 씁니다. 영어로 ‘and so on’ 또는 ‘etc’라고 하죠. 단어 맥락만으로 보자면, 직접적인 대분류 단어로 묶음 표현을 하지 못한 만큼 중요도나 영향도가 낮은 항목이 ‘기타’에 포함됩니다.

그런데, 리눅스에서 ‘etc’ 디렉터리는 정반대입니다. 디렉터리 이름과 달리, 이 속에는 시스템 설정 관련 파일이 있습니다. 시스템 부팅과 전반에 걸쳐 영향을 주는 파일이 대부분이죠. [여기보기] 글 중, “파일과 디렉터리에는 정확한 소유권과 적당한 권한을 부여하라” 글을 보셨을까요? ‘etc’ 디렉터리와 파일을 보호하는 기초적인 방법은 역시 소유권과 권한 설정입니다. 그래서 ‘chown’과 ‘chmod’ 명령어만으로 대부분 해소할 수 있습니다.

etc 디렉터리

‘etc’ 디렉터리에 있는 몇몇 대표적인 파일을 살펴보겠습니다.

/etc/passwd와 /etc/shadow

다른 [여기보기] 글을 이미 보신 분들께는 지겨우실 수 있습니다. ‘/etc/passwd’ 파일과 ‘/etc/shadow’ 파일에는 사용자 정보와 비밀번호가 들어있습니다. ‘/etc/passwd’에는 사용자 ID, 패스워드, UID, GID, 홈 디렉터리, 셸 정보 등이 있고, ‘/etc/shadow’에는 시스템에 등록된 모든 사용자 계정의 패스워드가 암호화된 형태로 저장돼 있습니다. 변조되거나 노출된다면, 집 현관문을 열어두는 정도가 아니라 그냥 집 담벼락 자체를 다 허물어버리는 것과 같아집니다.

조치 방안

파일 소유자와 권한을 확인한 후, 이상이 있을 시 변경해야 합니다.

// 파일 소유자 및 권한 확인
$ ls -l /etc/passwd /etc/shadow

// passwd
$ chown root:root /etc/passwd
$ chmod 644 /etc/passwd

// shadow
$ chown root:shadow /etc/shadow
$ chmod 640 /etc/shadow

/etc/hosts

‘/etc/hosts’ 파일에는 IP 주소와 호스트 네임을 매핑하는 정보가 들어있습니다. 운영체제에서 웹 주소 입력 시 일반적으로 DNS보다 ‘/etc/hosts’ 파일을 먼저 참조하므로, 이 파일 안에 먼저 기록된 IP 주소와 호스트 네임 매핑 정보가 있다면 DNS를 거치지 않고 곧바로 매핑 주소로 이동합니다. 이런 우선순위 인식 특성으로 인해, DNS를 우회하도록 ‘/etc/hosts’ 파일을 변조하는 파밍(Pharming) 공격 대상이 됩니다.

  • 파밍(Pharming): 사용자가 접근하는 DNS나 호스트 파일을 변조해 가짜 사이트로 접속을 유도한 뒤, 개인 정보를 훔치는 기법.

그래서 시스템 내 다른 사용자가 ‘/etc/hosts’ 파일을 읽는 권한까지만 부여해야 적당한 수준이라 할 수 있습니다. 파일 읽기 권한이 있어야, 관리자가 의도한 호스트로 사용자가 접근하도록 유도할 수 있으니까요. (관리자가 설정한 호스트로 사용자가 접근하는 것을 막으려 한다면, 읽기 권한도 빼면 됩니다.)

조치 방안

$ chown root:root /etc/hosts
$ chmod 640 /etc/hosts

/etc/xinetd.conf

‘xinetd(Extended Internet Service Daemon)’는 인터넷 기반 연결을 관리하는 슈퍼 서버 데몬(Super server daemon)입니다. 외부 네트워크 요청이 들어오면, 설정 파일에 등록한 내부 인터넷 서비스용 데몬을 실행하는 역할을 맡고 있습니다.이때 사용하는 설정 파일이 ‘/etc/xinetd.conf’ 파일입니다. 

과거에는 ‘inetd(Internet daemon)’를 인터넷 슈퍼 데몬으로 사용했었습니다만, 보안성과 효율성을 개선해 사용하는 데몬이 ‘xinetd’입니다. 리눅스 설치 패키지 종류에 따라, 기본으로 설치되지 않은 버전도 있습니다. 공식 설명은 아래 링크를 참고해주세요.

비인가자가 ‘/etc/xinetd.conf’ 파일 쓰기 권한을 가지게 된다면, 위협 요인 유발 서비스 데몬을 실행하는 참담한 결과로 이어질 수 있습니다. 애초에 ‘xinetd’를 설치하지 않았다면 모르겠지만, 필요로 인해 설치해야 한다면 꼭 설정 파일의 소유자와 권한을 확인해야 합니다.

조치 방안

$ chown root:root /etc/inetd.conf
$ chmod 600 /etc/inetd.conf

/etc/rsyslog.conf

시스템 운영 중에 발생하는 주요 로그는 매우 소중한 자원입니다. 장애를 겪거나 성능 개선이 필요할 때 결정적 힌트를 찾을 수 있는 다이아몬드 원석이니까요. 침입자의 흔적을 찾을 때도 꼭 필요합니다. 그래서 상시 로그를 기록할 수 있도록 서비스 데몬이 돌아야 하며, 그 데몬으로 돌아가는 프로그램이 ‘rsyslog(rocket-fast System for log processing)’입니다. 과거에는 ‘syslog-ng’나 ‘syslog’를 쓰기도 했습니다만, ‘rsyslog’에서 편의성과 성능이 많이 향상됐습니다. 

‘/etc/rsyslog.conf’ 파일은 로그 저장 위치나 원격지에 로그를 저장하는 로그 서버 설정 등이 있는 ‘rsyslog’의 설정 파일입니다. 즉, ‘/etc/rsyslog.conf’ 파일이 훼손되면 침입자의 흔적이나 시스템 오류 사항을 분석하기 위해 반드시 필요한 로그가 정상적으로 기록되지 않을 수 있습니다. 설정 파일의 소유자나 권한을 꼭 점검해서 다이아몬드 원석을 놓치지 말아야 합니다.

조치 방안

$ chown root:root /etc/rsyslog.conf
$ chmod 644 /etc/rsyslog.conf

/etc/services

‘/etc/services’ 파일은 네트워크 서비스를 위해 사용하는 소켓, 프로토콜, 포트 등을 정의한 파일입니다. 일반 사용자가 이 설정을 수정할 수 있게 허용돼 있다면, 서비스가 정상 동작하지 못하도록 포트 설정을 바꾸거나 비허용 서비스를 실행해 침해사고를 유발할 수 있습니다. 

이 역시, 소유자와 권한 설정을 통해 접근을 제한해야 합니다.

$ chown root:root /etc/services
$ chmod 644 /etc/services

보물창고 /etc 그리고

위에 나열한 파일 이외에도 훨씬 더 많은 파일이 시스템 전체를 지탱하기 위해 ‘etc’ 디렉터리에 포진하고 있습니다. 개발 과정에서 추가하는 패키지의 설정 파일도 더 추가될 수 있고, 앞으로 더 소개할 다른 [여기보기] 글에서도 ‘etc’ 디렉터리는 계속 등장할 것입니다. ‘etc’ 디렉터리의 무게감은 이름이 주는 가벼움과는 매우 다릅니다.

오늘은 평소에 쓸 일이 없어서 신경 쓰지 않았던, ‘etc’ 디렉터리 안의 파일을 한번 쭈욱 둘러보며 읊어 봐주세요. 우리가 그들의 이름을 불러주기 전에는 그는 다만 하나의 파일에 지나지 않았을지도 모릅니다. 우리가 그들의 이름을 불러주었을 때, 그들은 우리에게로 와서 보물이 돼 줄 것입니다.

내가 그의 이름을 불러주기 전에는 그는 다만 하나의 몸짓에 지나지 않았다. 내가 그의 이름을 불러주었을 때, 그는 나에게로 와서 꽃이 되었다.

김춘수의 <꽃>