SSH 프록시 구조를 통한 Shell Native 명령어 제어
2024년 11월 22일
서문
서버 접근 제어 솔루션은 기업의 중요 자산인 서버를 보호하는 핵심적인 보안 솔루션입니다. 서버 접근 제어 솔루션의 핵심은 어떤 사용자가 어떤 서버에 접속하여 어떤 명령어를 실행했는지를 추적하고 제어하는 것입니다. 일반적인 서버 접근 제어 솔루션은 명령어 제어를 위해 마치 가상 터미널처럼 사용자가 엔터키를 입력하기 전까지 입력했던 문자 하나 하나를 버퍼링하여 사용자가 실행하고자 하는 명령어를 조합하는 방식을 사용합니다. 하지만 이러한 방식은 개발에 막대한 시간과 비용이 들 뿐만 아니라 사용자가 단축키 등 다양한 키 조합으로 명령어를 입력할 경우, 정확한 명령어를 파싱해내는 것이 매우 어렵습니다. 따라서 QueryPie에서는 명령어 파싱에 대한 정확성을 높이기 위해 Shell Script를 이용한 명령어 오딧 및 제어 기술을 개발했습니다.
문제

SSH 세션이 수립되고 클라이언트와 서버간의 데이터 통신은 기본적으로 사용자가 키 입력을 할때마다 한 글자 한 글자씩 전송되며, 그 형식은 터미널에서 출력 형식을 제어하기 위해 사용되는 제어 시퀀스인 ANSI 코드입니다. ANSI 코드는 다양한 ANSI 이스케이프 시퀀스를 포함하고 있어 이러한 문자열 스트림 상에서 사용자가 입력한 명령어만 정확히 파싱해 내는 것은 가상 터미널을 하나 만드는 것처럼 어렵습니다. 그래서 대부분의 서버 접근 제어 솔루션들은 정확한 명령어 파싱을 통해 위험한 명령어를 차단하는 것 보다는 증적을 남기는 쪽에 더욱 중점을 두고 있으며, 이는 서버 보안에 대한 취약점이 여전히 존재함을 의미합니다. 특히 서버 명령어의 경우 단축키 이용 또는 alias 설정 등 다양한 방식으로 명령어를 우회 실행하는 것이 가능한데, 대표적으로 서버 접근 제어 솔루션을 통해 금지 명령어를 지정하더라도 스크립트 안에 해당 명령어를 포함하여 실행하는 것이 그 방법입니다. MITM을 하는 프록시 서버에서 사용자 키 입력을 조합하여 명령어를 파싱하는 일반적인 서버 접근 제어 방식으로는 이러한 우회 공격들에 대하여 대응을 할 수 없습니다. 따라서 보안을 위해서는 서버에 에이전트를 설치하여 프로세스 감시용 데몬을 띄우는 등 프록시 레벨보다는 서버 레벨에서 제어하는 것이 보안성을 높일 수 있습니다.