'20./22. Linux'에 해당되는 글 4건

  1. 2014.09.30 GNU Bash 환경 변수 명령어 인젝션 Shellshock (1)
  2. 2014.02.05 [Ubuntu 12.10 Desktop] 우분투 메뉴바 사라짐
  3. 2014.02.05 How to install DVL
  4. 2013.07.08 [Linux/부팅] 리눅스 부팅 과정

GNU Bash 환경 변수 명령어 인젝션 Shellshock


GUN bash Environment Variable Command Injection


발생 원인


공격 문구를 삽입할 때 () { :;}; [공격 명령어]; 를 이용하여 bash 쉘의 취약점을 이용하게 됩니다. 쉘 스크립트 문법을 분석했을때 함수선언 () 이후 { } 중괄호에 있는 코드를 실행 후 종료해야 하지만 Syntax 오류로 인해 종료되어야 할 시점 이후로 파싱되어 공격 명령어가 실행됩니다.


테스트 및 공격방법 


+ CVE-2014-6271 [bash 테스트]

Shellshock 취약점이 발생하는지 테스트는 Unix 터미널에서 아래와 같이 입력한다.

 env check = 'Not vulnerable' x='() { :;}; check=Vulnerable' bash -c 'echo $check'


실행환경 : Ubuntu 10.04

~ $ uname -a


~ $ bash --version


터미널에서 환경변수를 입력하여 취약하면 Vulnerable 이라는 check 변수의 값을 확인 가능하다.


만일 취약하지 않다면 x함수를 정의하지 못해 무시한다는 문구를 확인 가능하다. 

bash: warning: x: ignoring function definition attempt bash: error importing function definition for 'x' vulnerable


+ CVE-2014-6271 : Remote Code execution through bash [공격방법]

Shellshock 취약점을 이용하여 Apache 서버를 원격으로 공격 가능한지 확인한다.

 [root@host cgi-bin]# curl -k -H 'User-Agent: () { :;}; echo aa>/tmp/aa'  localhost/cgi-bin/hi


테스트 환경 : CentOS 6.3

] # uname -a


apache 서비스 시작합니다.

] # service httpd start



Apache의 cgi-bin을 이용하여 bash에 접근할 것이며, 이용할 페이지는 아래와 같이 간단하게 만든다.

 CGI (Common Gateway Interface) 프로그램은 웹과 서버사이의 data 교환을 해주는 역활을 하며, 보편적으로 Perl과 C언어로 작성되어 있다.

# pwd

# ll hi

# cat hi


다른 PC 에서 웹서버 및 cgi-bin 구동을 확인한다.


일단 Apache가 구동되어있는 서버에서 Shellshock 취약점이 정상 작동하는지 테스트한다.

] # curl -k -H 'User-Agent: () { :;}; echo "test, oneandonlyme">/tmp/aa'  http://localhost/cgi-bin/hi


임시 폴더인 tmp 밑에 echo를 이용하여 aa파일 생성 후 "test, oneandonlyme" 문장을 리다이렉트가 된것을 확인 가능하다. cat을 이용하여 /tmp/aa 내용을 확인하면 아래와 같다.



이제 원격에서 웹 브라우저를 이용하여 공격합니다.

사용 도구 : Firefox beta 버전인 Aurora, Burp Suite Free Edition v1.5


웹 브라우저를 이용하여 해당 웹 서비스에 접근 가능한지 확인합니다.


중간 프록시 툴을 이용하여 웹 서비스에 접근할때 HTTP 요청 페이지를 확인합니다.


HTTP 요청 페이지에서 User-Agent를 변경한다. 

Shellshock 공격 코드인 () { :;} [실행하고 싶은 명령어] 입력 후 전송(Forward)한다.


웹 페이지는 HTTP 정상 응답 된 것을 확인 가능하다.


공격받은 Apache 웹 서버에서 결과를 확인한다. tmp 아래 aa 파일에 "test2,by oneandonlyme." 라고 작성된 파일이 HTTP 요청으로 생성된 것을 확인 가능하다.



실행원리


env val='() { :;}; echo [Unexpected command]' bash -c "echo [Real command]"

[Unexpected command]

[Real Command]


1. env val - bash 명령어가 실행되기 전에 env 환경 설정 변수가 설정된다.

2. echo [Unexpected command] - 임의로 고정시킨 명령어가 실행된 후 bash가 실행된다.

3. Unexpected command - 예상하지 못했던 먼저 실행된다.

4. Real command - 예상된 명령어가 다음 실행된다.



bash 취약점 보안 가이드


http://mac-how-to.wonderhowto.com/how-to/every-mac-is-vulnerable-shellshock-bash-exploit-heres-patch-os-x-0157606/


참조 자료


http://lifehacker.com/how-to-check-if-your-mac-or-linux-machine-is-vulnerable-1639211806

https://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271



저작자 표시 비영리 변경 금지
신고

 Ubuntu menu


Ubuntu 12.10 Desktop 버전

Vmware  Workstation 7

 

  

프로젝트 진행중에 잠깐 재시작했더니 콘솔접속이 되고

#startx 로해서 그래픽으로 부팅해봐도 메뉴바가 사라졌있고.. 시간은 갈 뿐이고.. 난 망했고

 

 

 

일단은 #startx 로 GUI를 불러온다.



이러면 망하는거야 아주..

 

ALT + CTRL + T 를 입력하면 Terminal이 뜬다

 

#ccsm 을 실행한다

만일 없으면

#apt-get install compoziconfig-settings-manager 로 설치하고 실행






ccms가 나타나면 오른쪽아래 Ubuntu Unity Plugin을 설치한다.

 









저작자 표시
신고

How to install DVL


Damn Vulnerable Linux



1. Login to DVL

login : root

password: toor



2. Partition the disk

#fdisk -l



#fdisk /dev/sda



: m



: p



n

p

1

maximum amount of cylinders 2610



: p



: w



3. Format the partition

# mkfs.ext3 /dev/sda

: y



# mkir /mnt/dvl

# mount /dev/sda /mnt/dvl



# startx


저작자 표시
신고

리눅스 부팅 과정

 

1. 전원스위치 ON

  • 시스템 전원공급
  • 메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행
    • BIOS프로그램은 전원공급과 함께 메모리의 특정번지에 자동 로드
    • CPU는 전원공급과 함께 특정번지의 BIOS프로그램을 자동실행



2. BIOS프로그램들의 실행내용

  • 자체진단기능(POST)
    • CMOS검사, CPU, MEMORY, 그래픽카드등 하드웨어의 이상유무를 검사하고 초기화
  • 부팅매체검색과 부트로더 실행
    • POST과정이 이상없이 진행완료되면 검색된 부팅매체에서 부트로더를 불러옴
    • 부팅매체로 선택되었다면 부팅파티션에 있는 0번섹터(MBR)에 있는 부트로더을 읽음
  • 부트로더가 메모리에 적재되면 BIOS는 종료, 시스템제어권은 부트로더(GRUB)



3. 부트로더의 실행

  • 부트로더 실행과 함께 /boot/grub/grub.conf파일을 읽어서 부팅 커널를 결정
  • 부트로더은 커널(kernel)이미지를 불러옴, 시스템 제어권을 커널로 넘김



4. 커널의 로딩

  • 커널은 swapper프로세스(PID 0번)를 호출함
  • swapper는 커널이 사용할 각 장치드라이브들을 초기화, init프로세스(PID 1번)를 실행
  • init프로세스가 실행되면서 /etc/inittab파일을 읽어들여서 그 내용들을 차례대로 실행



5. init프로세스의 실행

  • 이후의 과정들은 모두 init프로세스의 실행내용 (/etc/inittab파일의 실행내용들)
  • 로그인프롬프트가 나오기 까지의 부팅완료화면까지 init프로세스에 의해서 실행되는 내용들임
저작자 표시
신고
1 

카운터

Total : 85,369 / Today : 1 / Yesterday : 31
get rsstistory!