쉘쇼크(ShellShock) 리눅스 + Mac 보안 문제란? - 확인, 그리고 대처 방법
심각한 보안 문제가 배쉬(Bash) 쉘에서 발견됐습니다. 배쉬 쉘은 대부분의 유닉스(UNIX)형 운영 체제에서 중요한 한 축을 담당하고 있지요. 그 만큼 전 세계의 컴퓨터와 서버 보안에 중대한 영향을 미치고 있습니다.
이 문제는 4.3 버전에 이르기까지 모든 버전의 배쉬 스크립트 언어에 존재합니다. 대다수의 리눅스 기기, 그리고 OS X을 실행하는 모든 맥(Mac)이 영향권 안에 듭니다. 공격자가 이 취약점을 악용해 자신만의 코드를 실행할 수 있는 가능성이 있는 셈이지요.
이 공격이 어떻게 이뤄지는지, 그리고 어떻게 여러분 자신(혹은 서버)을 보호할 수 있는지 궁금하지 않으세요? 아래에서 좀 더 자세한 내용을 확인해 보겠습니다.
배쉬(Bash, Bourne Again Shell이 약자)는 OS X를 비롯한 대부분의 리눅스, BSD 배포판에서 사용되는 기본 명령어 해석기입니다. 배쉬는 명령어 글자 입력을 통해 프로그램을 실행하거나, 시스템 유틸리티 사용하고, 시스템 내부와 상호 작용 할 수 있게 해줍니다.
그 뿐만 아니라, 배쉬(대부분의 유닉스 쉘, 실행 환경)는 글자로 이뤄진 작은 스크립트 명령 집합을 통해 유닉스 시스템의 기능을 실행할 수 있게 해줍니다. 파이썬이나 자바스크립트 같은 대부분의 프로그램 언어와 유사하게, 배쉬는 일반적인 프로그래밍 언어에서 흔한 함수, 변수와 같은 기능을 지원합니다.
배쉬는 거의 어디에나 있을 정도입니다. (윈도우 환경을 제외한) 모든 명령어 사용 환경을 '배쉬(Bash)'라 부르는 사람이 많을 정도입니다. 실제로 배쉬 쉘을 사용하고 있는지에 관계 없이 말이지요. 혹시 웹 호스팅을 받으면서 SSH 클라이언트로 서버에 접속한 뒤, 터미널 명령어 화면에서 제로보드 XE(Xpress Engine)나 워드프레스를 설치해 보셨다면, 배쉬 쉘을 사용하셨을 가능성이 높습니다.
배쉬는 어디에나 있습니다. 이런 점이 이 취약성을 더욱 걱정스럽게 만듭니다.
프랑스의 보안 연구원인 스테판(Stéphane Chazleas) 씨가 발견한 이 취약점은 기술 관련 매체의 이목을 끌었을 뿐만 아니라, 전 세계에 있는 리눅스와 맥 사용자를 극심한 충격 속으로 몰아넣었습니다. 그도 그럴 것이, 쉘쇼크는 잠재적으로 공격자가 목표 시스템에 접근해 악의적인 코드를 실행할 수 있게 하기 때문입니다. 끔찍한 일이죠.
그런데, 어떻게 해서 공격이 가능한 걸까요? 가능한 한 아래로 내려가 보면, 이 공격은 환경 변수가 동작하는 방식을 악용합니다. 이런 환경 변수는 유닉스형 시스템이나 윈도우 모두에서 컴퓨터가 제대로 동작하는데 필요한 값을 저장하기 위해 사용됩니다. 그리고 시스템 전체에 걸쳐 어디서나 확인하고 사용할 수 있습니다. 환경 변수는 단 하나의 값(폴더 경로나 숫자 등)이나 함수를 저장할 수 있습니다.
함수는 소프트웨어 개발에서도 볼 수 있는 개념입니다. 그럼, 하는 역할은 무엇일까요? 간단히 말해, 여러 명령을 하나로 모아 묶은 다음, 이후 다른 프로그램이나 사용자가 실행할 수 있게 합니다.
배쉬 명령어 해석기의 문제는 함수를 환경 변수로 저장하는 방식에 문제가 있다는 것입니다. 배쉬에서는 한 쌍의 중괄호로 묶인 함수 안에 코드가 들어갑니다. 그런데, 공격자가 일부 배쉬 코드를 이 중괄호 밖에 두면, (보안 처리 없이) 시스템이 그 코드를 실행하게 됩니다. 때문에 시스템 전체가 코드 삽입(코드 인젝션, Code Injection)이라 불리는 다양한 공격에 무방비 상태가 됩니다.
연구진은 이미 아파치 웹 서버나 WGET 같은 일반적인 유닉스 유틸리티가 쉘 환경이나 환경 변수와 상호 작용하는 방식을 악용해 잠재적인 공격 경로를 발견해 냈습니다.
업무용 컴퓨터 시스템이나 서버에 보안 결함 사실이 확인돼 비상이 걸렸습니다. '배시 버그'라고도 하고 '셸쇼크'라고도 하는데, 지난 4월 발견됐던 하트블리드보다 더 심각한 문제라는 것이 전문가들의 경고입니니다. http://t.co/WChkK1Ewfy
— 연합뉴스TV (@News_Y) 2014년 9월 26일
심각하군요. 보안이 뻥뚤렸다는 말밖에는 …RT @n0lb00: 배시 셸쇼크 버그 http://t.co/FHjIK0DqkR 아직 맥에선 update가 소용없군요.
— 땀쟁이아빠 (@secssa) 2014년 9월 26일
시스템에 취약점이 있는지 확인해 보고 싶으신가요?
알아보는 방법은 간단합니다.
터미널 창을 연 다음, 아래 명령을 입력하고 실행하기만 하면 됩니다.
env x='() { :;}; echo vulnerable' bash -c "echo this is a test" [명령어 복사]
시스템에 취약점이 있다면, 아래와 같이 출력됩니다.
vulnerable
this is a test
취약점이 없는 시스템은 아래 두 메시지 중 하나의 형태로 출력합니다.
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for 'x'
this is a test
혹은
this is a test
글을 쓰고 있는 현재, 쉘쇼크와 관련된 알려진 모든 버그와 문제가 해결 및 패치 됐습니다 (쉘쇼크는 현지 시간으로 9월 24일, 한국 시간으로 9월 25일경 발견됨). 때문에, 시스템을 업데이트 해주기만 하면 됩니다. 우분투나 파생 배포판은 대시(Dash)를 중심 쉘로 사용하지만, 배쉬 역시 일부 시스템 기능을 위해 여전히 사용됩니다. 결과적으로, 시스템을 업데이트 해주는 것이 좋겠지요. 업데이트 하려면, 아래 두 명령을 입력해 주면 됩니다.
sudo apt-get update
sudo apt-get upgrade
페도라나 레드햇 기반 버전은 아래 명령을 실행하면 됩니다.
sudo yum update
애플은 아직 쉘쇼크를 위한 보안 패치를 내놓지 않았습니다. 하지만, 웹 서버나 DHCP 서버처럼 고급 유닉스 서비스를 설정하지 않은 한 맥 사용자는 배쉬 공격으로부터 안전하다고 밝혔습니다. 대신, 맥에 웹 서버 등을 설치해 놓았거나 맥 서버를 운영 중이라면 원격 공격에 광범위하게 노출됩니다. 애플은 여기에 대해서도 "우리 고급 유닉스 사용자를 위해 최대한 빨리 소프트웨어 업데이트를 제공할 수 있도록 작업 중에 있다"고 언급했습니다. 맥을 사용하신다면, 맥 앱 스토어를 열고 주기적으로 보안 업데이트를 확인해 주면 되겠지요.
국내는 크게 해당되는 분이 없겠지만, 리눅스 기반인 크롬북을 사용하는 분은 구글이 곧 업데이트를 제공할 것으로 보입니다.
사용 중인 배포판이 아직 배쉬를 위한 수정 업데이트를 배포하지 않았다면, 다른 배포판으로 전환하거나 혹은 다른 쉘의 설치를 고려해 보세요.
아직 쉘 명령 환경이 익숙하지 않은 분께는 피쉬 쉘을 사용해 보시길 추천합니다. 배쉬에서는 현재 사용할 수 없는 다수의 기능이 있을 뿐만 아니라, 리눅스에서의 작업을 한층 더 즐겁게 만들어 줍니다. 이런 기능으로는 자동 완성, 생기 있는 VGA 색상, 웹 화면에서 설정할 수 있는 기능 등이 있습니다. 이 밖에 깃(Git) 버전 관리 시스템과 긴밀하게 연동되며, 자동 완성 기능까지 제공하는 zSH 쉘도 있습니다. 확인해 보세요.
쉘쇼크는 이미 무기로 악용되고 있습니다. 취약점이 발견되고 세계에 알려진 지 하루 만에, 벌써 실제 환경에서 시스템에 침입하기 위한 수단으로 사용되기도 했습니다. 더 문제인 점은, 일반 가정 사용자나 회사 만이 취약한 게 아니라는 사실입니다. 보안 전문가들은 이 결함이 군사 시설이나 정부 시스템까지 위험에 처하게 할 것으로 예견하고 있습니다. 올 초의 하트블리드 문제 보다 더 악몽 같은 일인 셈이지요.
그렇기에, 부디 시스템을 업데이트해 주시길 바랍니다. 이번 일에 대해서 어떻게 생각하시는지 의견이 있으신 분은 알려 주세요. 오에스 톡(OSTalk) 커뮤니티와 아래에 있는 디스커스 댓글이 여러분을 기다리고 있습니다.