taeho's life logger

bash 취약점의 이해와 대응 방안 (CVE-2014-6271) 본문

서버보안

bash 취약점의 이해와 대응 방안 (CVE-2014-6271)

taeho Tae-Ho 2014.09.30 10:45

얼마 전에 리눅스 운영체제의 기본적인 쉘(shell)인 bash의 취약점이 발견되어 인터넷을 통해 널리 알려졌습니다.


하지만 이번에 발표된 취약점의 특징은 하트블리드 취약점과는 달리 네트워크 프로토콜의 결함이 아닌 리눅스에서 가장 널리 사용되는 쉘(shell)인 bash (bourne-again shell)의 취약점입니다


저는 처음에 자세한 내용이 아닌 트위터나 페이스북에 올린 한두 줄의  bash 취약점 소식을 듣고... "쉘이 원래 명령어를 실행하기 위한 도구인데...버그일 수는 있지만 취약점일까??" 싶었습니다. 한동안 이리저리 신경 쓸 일이 많아 오늘에야 자세한 내용을 살펴보니 참 황당한 bash의 버그였고 해킹에 악용된다면 웹쉘이 업로드된 수준의 위험을 갖는 취약점이었습니다.


쉘이 어떤 것인지 궁금하신 분은 다음의 포스트를 참고하세요.


관련 포스트 : 쉘을 이해하자. http://blogger.pe.kr/300


하지만 자세한 내용을 살펴보니... RedCastle SecureOS를 이용해 기본적인 정책만 적용해 두었다면..적어도 웹서버와 같이 인터넷에 개방되어 있는 서버에서도 걱정하지 않아도 되는데...라는 생각이 들었습니다.


먼저 bash 취약점에 대해 간단히 설명하면....


인터넷에 이런 문장이 떠돕니다. 하지만 그 의미를 정확히 이해하고 있는 사람은 얼마나 될까 싶습니다. 



간단히 설명하면 먼저 bash에는 (환경)변수라는 것이 있습니다.프로그래밍에 기본적으로 등장하는 변수와 개념이 같다고 보면 됩니다. 하지만 bash에서는 그 활용도가 조금 더 넓습니다. bash에서는 환경변수에 값이 아닌 함수를 등록하고 bash -c  [변수명] 과 같은 방법으로 변수에 등록된 함수를 실행시킬 수 있습니다.


위의 문장은 변수에 함수를 등록하는 과정을 수행하는 것인데 조금 이해하기 쉽게 바꿔서 써보면 다음과 같이 쓸 수 있습니다.



위와 같이 풀어쓰면 한 줄로 쓴는 것보다 조금 이해하기 쉽습니다. 

C나 java 등의 언어로 코딩을 조금이라도 해본 엔지니어라면 함수안에서 실제 수행될 코드는 중괄호 사이 {  } 라는 것을 이해할 것입니다.그런데 함수의 정의가 끝난 뒤에 두 라인의 명령이 있습니다. 사실 이런 경우는 에러가 나면서 실행이 안되어야 합니다. 하지만 bash에서 함수를 실행하기 위해 파싱하는 과정에서 중괄호의 끝인 } 와 ' 사이에 있는 명령(echo)과 ' 뒤의 명령(bash -c)을 실행시켜버리는 버그가 있는 것입니다.


과연 이 버그를 해커들이 어떻게 활용할 수 있을까를 생각해보면 웹쉘처럼 악용할 수 있습니다. 운영중인 웹서버에서 bash에 접근할 수 있는 있는 취약점을 찾을 수 있다면 해커는 서버에서 Telnet, SSH로 접속한 것과 같이 웹서버가 실행중인 계정으로 자신이 원하는 명령어를 얼마든지 원격에서 실행할 수 있습니다. 궂이 웹쉘을 서버에 업로드 하고 그 경로를 찾는 과정을 거치지 않아도 웹쉘과 같은 효과를 얻을 수 있는 것이죠.


위의 명령을 조금...아주 조금만 바꿔보면 다음과 같이 패스워드 파일을 읽는 것도 가능합니다.못할게 없습니다. 심지어 서버에다 스크립트를 만들어 실행하거나 웹의 소스를 위변조하거나 서버를 다운시키는 공격도 가능합니다.



PS나 웹방화벽, 웹쉘차단 솔루션 등이 있더라도 웹서버에서 이번에 발표된 bash 취약점을 통해 운영체제의 명령어와 중요 설정파일 및 데이터 파일에 접근하지 못하게 방어하는 것은 현실적으로 불가능합니다. bash 자체를 패치하지 않는다면 말이죠.


하지만 정말 심각한 문제는 이 취약점에 원격에서 웹서버 혹은 기타 네트워크 기반의 서비스를 수행하는 애플리케이션을 통해 접근할 수 있을 때 발생합니다. 서버에 Telnet, SSH 접속한 것과 동일한 수준의 명령실행이 가능하니까요. 생각만 해도 끔직한 사고가 발생하게 됩니다.


하지만 제가 예전에 포스팅했던 "웹쉘(webshell)의 위험성과 서버보안SW(RedCastle SecureOS)를 이용한 차단방법"에서 언급된 보안 정책을 적용해두었다면 걱정하지 않아도 됩니다.


왜냐하면 이 bash 취약점을 악용하기 위해서는 웹서버 대몬(httpd, java, htmls 등)이 bash에 접근해야 하는데  RedCastle SecureOS가 보안정책에 따라 그 접근을 원천적으로 차단해주기 때문입니다.


IPS와 웹방화벽, 웹쉘차단 솔루션과 같이 보안정책이 아닌 블랙리스트 방식의 차단 룰에 의한 접근통제는 새로운 취약성에 적절하게 대응할 수 없기 때문에 취약점이 나오면 호들갑을 떨면서 새로운 패턴업데이트를 기다려야 합니다.


위의 테스트는 레드햇 엔터프라이즈 리눅스 6.4 에서 테스트했습니다. 이하 모든 리눅스에 bash 취약점이 있는 것이지요.

신고
4 Comments
댓글쓰기 폼