2.log

Bash 취약점에 대하여 본문

HACKING/Bandit+

Bash 취약점에 대하여

2.log 2023. 4. 7. 21:11
728x90
반응형

 

Bash

Unix/Llinux 시스템에서 사용되는 기본 shell 중 하나로, 사용자와 컴퓨터 간 상호작용을 도와주는 인터페이스

command line을 통해 사용자의 입력내용을 컴퓨터가 해석 및 실행할 수 있게 도와주는 프로그램

 

 

SSH 접속 시 bash 를 사용하면 어떻게 되는가

ssh 접속 시 bash 를 실행하는 경우, 원격 서버에 로그인 할 때 로그인한 사용자 계정으로 직접 bash shell을 실행하게 됨

즉, 일반적인 ssh 접속과 달리 로그인한 사용자의 '로그인 셸' 과 상관없이 'bash 셸'을 실행 할 수 있고 이에 따라, 접속 후 새로운 bash 셸 을 실행하게 되므로, 기본 로그인 셸에 비해 다양한 기능을 사용할 수 있게 됨

 

이 때 로그인 셸에서 제공하지 않는 기능이란, 사용자가 일반적으로 사용하는 셸에서 제공하지 않는 특별한 명령어나 기능으로, 예컨대 bash 셸에서는 배열(array), 함수(funtion), 조건문(if/else), 반복문(for/while) 등의 다양한 프로그래밍적 기능을 사용할 수 있게되어 작업 효율성을 높일 수 있기도 함

 

또한 '-t' 옵션과 함께 사용할 경우 ssh 서버 접속 시 tty(터미널)을 할당해주게 되는데, 원격 서버에 로그인하는 동안에도 로컬에서 입력한 명령이 즉시 실행되도록 하기 때문에 ssh 클라이언트에서 제공하는 로컬 셸과 유사한 셸 환경을 제공받을 수 있어 ssh 클라이언트와 ssh 서버 간 통신에서 발생하는 문제를 최소화 하고 사용자에게 로컬에서 사용하는 것과 같은 사용성을 제공하는 데 도움이 됨

 

 

 

명령어

# bash
ssh <user>@<server> bash

# -t, bash
$ ssh -t <user>@<server> bash

# -t, bash -p
$ ssh -t <user>@<server> bash -p

 

마지막 bash -p 의 경우 환경변수 'BASH_ENV' 를 설정하고 해당 변수가 설정된 스크립트를 실행하도록 히여 공격자가 원격서버에 로그인하는 경우에도 현재 사용자의 환경변수 그대로 사용하여 보안 강화할 수 있음

 

 

SSH 접속 시 Bash 취약점

이는 쉘 스크립트 취약점과 관련이 있는데, 외부 사용자가 원격 서버에 로그인 하여 악의적인 셸 스크립트를 실행할 수 있는 위험이 있음. 취약한 환경변수를 이용해 공격을 시도하는 Shellshock 취약점이 대표적으로, '() { :;};' 이라는 문자열을 환경변수로 전달하여 악용함. (해당 문자열은 셸에서 함수를 정의하는 구문으로 ':' 은 아무일도 하지 않는 함수를 뜻하며 이를 이용해 공격자가 원하는 코드를 실행 함)

 

 

예시코드

$ env '() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo Shellshock"
  • env : 환경변수 설정하는 명령어
  • '() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' : 취약한 문자열
  • "bash -c "echo Shellshock" : bash shell 에서 echo Shellshock 명령 실해하는 코드

 

해당 코드 실행 시 환경 변수를 이용한 취약점 이용해 id 명령어 등을 실행시킬 수 있게 되고, 이러한 방식으로 권한을 획득해 중요한 정보를 유출하거나 시스템을 마비시킬 수 있음

 

 

 

대응방안

1. 최신버전 bash 와 운영 체제 패치 사용

2. 환경 변수에 대한 신뢰할 수 없는 입력 허용 x

3. -t 옵션 없이 ssh 로 원격 서버에 접속하더라도, 보안 강화를 위해 일반 사용자 대신 서비스 계정 사용

4. 공개키-비밀키 인증방식 사용 적용

 

 

 

 

 

 

728x90
반응형
Comments