[여기보기] Cron과 At이 주는 자유를 위해, 실행 권한을 점검하라

🧐 | 2022-10-28

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

안녕하세요, 넷마블 보안실 보안개발팀 윤형근입니다.

렛츠인크립트(Let’s Encrypt) 인증서를 갱신해보신 적이 있으신가요? 렛츠인크립트 인증서는 3개월마다 만료되기에, 만료에 맞춰서 갱신해야 합니다. 단순 계산으로는 1년에 4회만 하면 되지만, 대부분 이조차도 크론탭(Crontab)을 활용해 자동 갱신합니다. 예약 반복 작업으로 걸어두기 딱 좋은 사례입니다.

이처럼 작업 시간을 위해 대기하거나 반복 작업을 하면서 소모하는 시간으로부터 자유를 얻기 위해, 리눅스에서는 반복 작업에는 ‘Cron’, 일회성 예약 작업에는 ‘At’을 사용합니다. 이 두 명령어 기본 사용법은 아래 링크를 참고해주세요.

랜섬웨어나 멀웨어는 보통 침투 시점과 실제 동작하는 시점이 분리돼 있습니다. 동작 트리거로 시간 조건을 사용할 때 이 두 명령어를 활용합니다. 서버에 기본으로 설치돼 있는 명령어이므로 간편하게 실행할 수 있기 때문이죠. 만약 서버 안에서 동작할 예약 작업이 없다면, 이 두 기능 모두를 제거하는 것도 하나의 방법일 수 있습니다. 하지만 써야 하는 경우는 필연적으로 생기기 마련이므로, 허가된 사용자만 이를 실행할 수 있도록 점검하는 것이 좋습니다.

Crontab과 At

‘Crontab’과 ‘At’ 명령어 실행 권한 관리 방법은 동일합니다. ‘/etc’ 디렉터리 안에 있는 ‘.allow’와 ‘.deny’ 파일로 화이트리스트나 블랙리스트 방식으로 권한을 관리합니다. 기본으로 ‘.allow’와 ‘.deny’ 파일 자체가 없는 경우도 있으니, 실행 권한을 부여할 계정과 정책에 맞춰서 새로 추가해도 됩니다.

  • .allow: 해당 파일에 등록한 사용자만 명령어를 사용할 수 있음.
  • .deny: 해당 파일에 등록한 사용자는 명령어를 사용할 수 없음.

조치방안

위 내용에 비춰보자면, ‘Crontab’과 ‘At’ 명령어 실행 파일 소유자와 접근 권한, 각 명령어의 ‘.allow’와 ‘.deny’ 파일 소유자와 접근 권한, ‘.allow’와 ‘.deny’ 파일에 입력한 사용자 계정 리스트까지, 최소한 3가지는 꼭 확인해야 합니다.

루트(root) 이외 일반 사용자 또는 허용하지 않은 사용자가 ‘Crontab’과 ‘At’ 명령어를 사용할 수 있다면, 고의나 실수로 안전하지 않은 예약 명령을 실행해 시스템에 피해를 줄 여지가 생깁니다. 악의적인 사용자나 공격자가 실행한다면, 받을 영향이 매우 커질 수밖에 없습니다. 그래서 파일 소유자는 루트여야 하고, 파일 권한은 640보다 작아야 합니다.

// .allow와 .deny 파일 소유자 및 권한 확인
$ ls -l /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny

ls: cannot access '/etc/cron.deny': No such file or directory
ls: cannot access '/etc/at.allow': No such file or directory
-rw-r----- 1 root daemon 144 Feb 20  2018 /etc/at.deny
-rw-r----- 1 root root     5 Aug 17  2021 /etc/cron.allow

루트가 아닌 다른 사용자가 파일 소유자로 돼 있거나 권한이 640보다 초과해 있다면, 소유자와 권한을 변경해야 합니다.

$ chown root [파일명]
$ chmod 640 [파일명]

‘.allow’와 ‘.deny’ 파일에 입력된 사용자 계정은 각자 편한 편집기로 수정하시면 됩니다.

내가 허락하지 않은 자동 결제

내가 사용하지 않거나 낯선 서비스가 자동 결제로 내 통장에서 비용을 빠져나간 경험이 있으신 분 계신가요? 카드사와 고객센터에 연락해서 어디에서 내 권한이 빠져나간 건지 확인하던 그 상황을, 우리가 관리하는 리눅스 서버에도 똑같이 대입한다고 생각하시면 어떨까요?

“급여가 스쳐 지나가는 내 통장”은 내 계좌에서 카드사가 카드 사용 비용을 지정한 날짜에 가져가도 된다고 허락(?)을 했기에 생긴 결과입니다. 그나마 내가 허락하지 않은 자동 결제까지 빠져나간 건 아니었음이 다행일 수도 있습니다.

결제일에 맞춰 내 통장을 훑고 가는 자동 결제처럼, 허락한 사용자만 ‘Cron’과 ‘At’을 사용하게 돼 있는지 꼭 점검해보시길 추천합니다.