본문 바로가기

Learning/└◆Network Hacking

배시쉘 버그(bash shell bug, shellsock)


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