OpenSSH 취약점 CVE-2024-6387: 임시 차단과 패치 적용

OpenSSH 취약점 CVE-2024-6387은 접속한 쪽이 120초 안에 로그인을 끝내지 않을 때 울리는 알람 신호를 파고듭니다. 알람을 처리하는 도중 메모리가 어긋나면 공격자가 심어 둔 코드가 root 권한으로 실행됩니다. 알람을 꺼서 급한 자리를 막고, 업데이트로 코드를 고친 뒤 되돌리는 순서로 정리했습니다.
2006년에 한 번 고쳐졌던 문제가 2020년 코드 정리 과정에서 되살아나 regreSSHion이라는 이름이 붙었습니다. 엔터프라이즈 리눅스 9 계열이 전부 대상이고, 패치는 2024년 7월에 나왔습니다. 지금 서버에 깔린 openssh가 그 갱신을 받았는지 확인하는 것으로 시작합니다.
1️⃣ OpenSSH 취약점
접속이 들어오면 sshd는 그 접속을 전담할 자식 프로세스를 하나 생성합니다. 로그인 인증은 그 안에서 진행되고, 접속한 쪽이 누구인지 아직 모르는 상태이므로 이 자식은 root 권한으로 돕니다.
자식은 태어날 때 알람을 하나 걸게 되는데 LoginGraceTime 기본값 120초입니다. 그 안에 로그인을 못 마치면 알람이 울리고 프로세스는 하던 일을 멈추고 정리로 넘어갑니다. 붙어만 놓고 아무것도 안 하는 연결이 쌓이지 않게 막는 장치입니다.
문제는 알람이 끼어드는 방식입니다. 시그널은 프로세스가 무슨 일을 하고 있든 그 자리에서 중단시키고 처리 함수로 점프 시킵니다. 하던 일이 메모리를 정리하는 중이었다면 그 정리가 반쪽 상태로 멈춥니다. 그런데 알람 처리 함수는 로그를 남기려고 syslog()를 부르고, 이 함수가 또 메모리를 씁니다. 반쯤 뜯긴 메모리 위에 새 작업이 올라갑니다.
공격자는 일부러 인증을 끌면서 알람이 울리는 순간에 프로세스가 메모리 작업 중이도록 접속 데이터를 조절합니다. 타이밍이 맞으면 심어 둔 코드가 root 권한으로 실행됩니다. 밀리초 단위라 수천에서 수만 번을 시도해야 한 번 걸리지만, 자동화하면 몇 시간 안에 뚫립니다.
이름이 regreSSHion인 것은 2006년에 고쳐진 문제(CVE-2006-5051)가 2020년 OpenSSH 8.5p1에서 코드를 손보다 방어 장치가 빠지면서 18년 만에 되살아났기 때문입니다.
2️⃣ openssh 버전과 패치 적용
1. 현재 sshd 상태 확인
rpm -q openssh-serveropenssh-server-8.7p1-38.el9.x86_64설치된 openssh 버전을 확인합니다.
~]# rpm -q --changelog openssh-server | grep CVE-2024-6387 ~]#패치 기록에 이 취약점이 있는지 확인합니다. 아무것도 안 나오면 패치가 안 된 상태입니다. 다만 배포판이 openssh를 9.8p1 이상으로 통째로 올리면 이 문구가 기록에 남지 않으므로, 업데이트 뒤에는 버전으로 판단합니다.
~]# sshd -T | grep -E "logingracetime|^port"port 22
logingracetime 120
~]#sshd의 시간 제한 값을 확인합니다.
2. 임시 차단 설정 파일 만들기
~]# cat > /etc/ssh/sshd_config.d/10-regresshion-mitigation.conf <<'EOF'
# CVE-2024-6387(regreSSHion) 임시 완화 — 2026-09-11
# openssh 업데이트로 패치되면 이 파일을 지우고 reload 할 것
LoginGraceTime 0
EOF기존 설정 파일은 건드리지 않고 파일을 하나 추가합니다. 설정 폴더(sshd_config.d)의 파일은 이름 순서대로 읽히고 먼저 나온 값이 이기기 때문에, 이름을 10-으로 시작해 제일 먼저 읽히게 합니다.
chmod 600 /etc/ssh/sshd_config.d/10-regresshion-mitigation.conf퍼미션을 600으로 맞춥니다.
3. 문법 검사 → 적용 확인 → 반영
sshd -t~]#아무 출력이 없으면 정상입니다. 에러 메시지가 있을 경우 작업을 멈추고 다시 체크해야 합니다.
sshd -T | grep logingracetimelogingracetime 0실제 적용된 값을 미리 체크합니다. ‘logingracetime 0’이 나옵니다.
systemctl reload sshd리로드를 진행하며 현재의 세션은 끊기지 않습니다.
4. 새 창으로 접속 확인
기존의 창을 유지하면서, 새 창으로 접속 테스트를 합니다.
문제가 생길 경우
rm /etc/ssh/sshd_config.d/10-regresshion-mitigation.conf && sshd -t && systemctl reload sshd다시 되돌리기를 진행합니다.
5. 나중에 운영체제 업데이트를 한 뒤
rpm -q openssh-serveropenssh-server-8.7p1-38.el9.x86_64SSH 버전을 확인합니다. 9.8p1 이상으로 나오면 패치된 것입니다(이 취약점은 8.5p1~9.7p1). 그때 위의 되돌리기 명령으로 이 파일을 지우시면 됩니다.
3️⃣ 운영체제 업데이트
‘2️⃣ openssh 버전과 패치 적용’은 임시로 적용하는 것이므로, 운영체제를 업데이트하면 그때 정리해야 할 것이 하나 남습니다.
배포판 업데이트는 openssh 패키지를 새 버전으로 올리지만, 직접 만든 드롭인 파일은 건드리지 않습니다. sshd_config.d 안에 그대로 남아 LoginGraceTime 0이 계속 살아 있게 됩니다. 취약점이 고쳐진 뒤에도 시간 제한 없는 상태로 서버가 돌아간다는 뜻입니다.
그래서 업데이트를 마치면 rpm -q openssh-server로 버전이 9.8p1 이상인지 먼저 확인하고, 확인이 되면 위 되돌리기 명령으로 파일을 지웁니다. 이 순서를 지키면 시간 제한은 120초로 돌아오고 취약점은 코드 쪽에서 막힌 상태가 됩니다.
필요할 경우 Alma Linux 9.4에서 9.8로 업데이트를 진행할 수 있습니다.
ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.