■ CentOS
# yum -y install gcc
# gcc -o test test.c
# ./test
[실습] 쉘버그(bash shell bug)에 대해서
용어 : 배시쉘버그(bash shell bug) = 쉘속(shellsock)
용어 : Zero Day Attack (0 day attack)
① exploit db 사이트에 접속하여 정보를 검색 shellsock에 대한 정보 검색
http://www.exploit-db.com 사이트에 접속한다.
오른쪽 상단의 "Search" 선택한다.
"Title" 부분에 "bash" 입력
-> "Title: bash "
2014-09-25 GNU Bash - Environment Variable Command Injection (ShellShock)
[그림 1] exploit-db.com /search : bash
[그림 2] 2014-09-25 GNU Bash - Environment Variable Command Injection (ShellShock)
Exploit Database Note: The following is an excerpt from: https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/
Like “real” programming languages, Bash has functions, though in a somewhat limited implementation, and it is possible to put these bash functions into environment variables. This flaw is triggered when extra code is added to the end of these function definitions (inside the enivronment variable). Something like:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test
The patch used to fix this flaw, ensures that no code is allowed after the end of a bash function. So if you run the above example with the patched version of bash, you should get an output similar to: $ 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 |
■ 관련된 정보
■ bash shell function
(함수 선언) # a () { CMD; CMD; CMD; }
(함수 실행) # a
(함수 확인) # typeset -f
(함수 해제) # unset -f a
■ env 현재 쉘에서 설정(export)된 환경변수들의 목록 출력
# env
# env LANG=C CMD
[실습]
# export LANG=ko_KR.UTF-8
# system-config-network-gui
# export LANG=ko_KR.UTF-8 ; system-config-network-gui 하위 쉘들도 같은 환경변수로 이루어진다.
# env LANG=ko_KR.UTF-8 system-config-network-gui 프로그램이 종료되면 임시 설정된 변수가 사라진다.
ex $ env x='() { :;}; echo vulnerable' CMD <-- 이프로그램을 실행할 때만 이 변수를 사용
■ bash -c CMD
# bash -c date bash -c 를 사용하면 뒤에 CMD를 지정한(bash)쉘을 띄어서 사용할 수 있다.
# bash -c cal ex bash -c "echo this is a test"
■ : # while : <-- : 아무역할을 하지 않는 것, (항상 참이 된다.)
do
CMD
done
# if [ 조건 ] ; the <--- 조건에 맞으면 아래 동작(else가 : 이기 때문에 무의미하다.)
echo "OK"
else
:
fi
■ 구문 분석
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
배쉬쉘 -> 해석기 (커널만큼 중요)
공격자의 입장에서의 쉘 -> 무결한 코드였지만 배쉬쉘에 결점을 찾아냄.
'put these bash functions into environment variables.' 쉘 안에 함수를 정의할 수 있다.(한번 더 해석이 된다.)
extra code를 함수가 정의된 부분 끝에 추가할 수 있다.($ env x='() { :;}; echo vulnerable')
배시쉘 버그(bash shell bug, shellsock)
■ (bash 쉘 버그가 존재하는 상태)
# bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. |
# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable this is a test |
■ (bash 쉘 버그가 존재하지 않는 상태)
# yum -y install bash
.... (중략) ..... =================================================================================== Package Arch Version Repository Size =================================================================================== Updating: bash i386 3.2-33.el5_11.4 updates 1.8 M
Transaction Summary =================================================================================== Install 0 Package(s) Upgrade 1 Package(s)
Total download size: 1.8 M Downloading Packages: bash-3.2-33.el5_11.4.i386.rpm | 1.8 MB 00:01 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Updating : bash 1/2 Cleanup : bash 2/2
Updated: bash.i386 0:3.2-33.el5_11.4
Complete! |
# bash --version 표기상으로 3.2.25동일하다. zero day 임시적 패치
GNU bash, version 3.2.25(1)-release (i386-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. |
# telnet localhost
root 사용자로 로그인 새로운 쉘(패치된 쉘)
# bash --version
GNU bash, version 3.2.25(1)-release (i386-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. |
# exit
# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
this is a test |
패치가 되어서 배쉬쉘 버그가 정상 동작 하지 않는다.
# reboot
부팅이 된 이후에 root 사용자로 로그인한다.
# bash --version 표기는 변하지 않지만 실제로 패치되었다.
GNU bash, version 3.2.25(1)-release (i386-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. |
'Learning > └◆Network Hacking' 카테고리의 다른 글
스캐닝(Scanning) (0) | 2016.12.29 |
---|---|
DNS 정보 수집 (0) | 2016.12.28 |
정보 수집 단계(Data Gathering) (0) | 2016.12.28 |
Packet Sniffing 공격 (0) | 2016.12.27 |