티스토리 뷰


shellshock취약점은 친구들과 발표를 준비한 적이 있어서공부를 조금 했는데요!


먼저 shellshock 취약점은 2014년 9월 24일 발견된 취약점이고, cve-2014-6271로 등록되어 있습니다.


shellshock취약점은 bash shell에서 임의의 환경변수에 특정 코드를 삽입하여 실행할 수 있는 취약점입니다.


bash shell은 서버 os인 유닉스 및 리눅스에서 많은 역할을 하고 있다는 점에서 매우 위험한 취약점이였습니다.


공격자는 해당 취약점을 이용해 악의적인 명령이 포함된 환경변수를 사용하여 악의적인 행위를 수행 할 수 있습니다.


대략 이 취약점은 40년 정도 존재해 왔다고 합니다.


지금은 패치가 되어있고 이 취약점은 bash버전 4.3이하에서 발생한다고 합니다 ㅎ!


먼저 Shell shock의 원리를 설명하기 전, 환경 변수를 정의 할 때, 환경 변수에 변수와 함수를 정의 할 수 있는데요, 먼저 asdf라는 문자열을 환경변수 x에 등록을 하고 x를 실행하면 함수가 아니기 때문에 실행되지 않습니다.



그래서 printenv 값을 보면 asdf라는 문자열이 나오는 것을 확인할 수 있습니다.



그 다음은 환경 변수에 함수를 정의하는 방법인데요. 먼저 리눅스 쉘 상에서 함수를 정의 할 때 이러한 문법을 사용하여 정의 합니다.


그리고 export –funtion옵션과 함께 환경변수에 등록을 하고 그 환경변수를 호출하면 함수 안에 있는 내용인 echo asdf가 실행되어 asdf가 출력됩니다.




Shellshock의 원리인데요. 먼저 Bash의 환경 변수에 함수처럼 보이는 변수를 정의합니다. 함수처럼 보이는 변수란 함수문법으로 시작되는 내용을 적어서 정의해줍니다. (일종의 속임수)



현재는 printenv명령으로 환경변수의 값을 보면 그냥 문자열의 형태로 나와있습니다.



하지만, bash subshell을 열면 Bash가 시작되면서 등록된 환경 변수를 읽어오게 됩니다. 다시 printenv명령을 이용해 환경 변수를 보면 함수처럼 보이는 변수가 진짜 함수로 정의 되어있는 것을 볼 수 있습니다.



여기서 Bash는 () {(함수 문법으로)로 시작하는 변수를 보고 함수라고 판단한다는 것을 알 수 있습니다. 아까의 환경변수 X를 실행하면 함수 안에 있던 echo hello가 실행되어 출력 되는 것을 확인 할 수 있습니다.




하지만 여기서 뒤에 명령어를 더 추가하였을 때 취약점이 존재합니다, 함수처럼 보이는 환경변수에 세미콜론과 명령어들을 추가해주고 bash subshell을 실행하면 함수로 정의되면서 뒤에 있는 명령들까지 실행 되는 shell shock 취약점이 존재합니다.




제가 공부한 내용이지만 틀린 내용이 있을 수 있으니, 이상이 있으면 댓글을 달아주시면 감사하겠습니다!!


'pwnable > 정리' 카테고리의 다른 글

Static Link 방식과 Dynamic Link 방식  (0) 2018.01.07
gdb 사용법 정리  (0) 2018.01.06
IA32 인텔 CPU 구조, 레지스터  (3) 2017.12.20
쉘코드 모음 정리  (1) 2017.12.14
올리 디버거 기초 사용법, 명령어  (0) 2017.12.14
Comments