배경: 데비안 리눅스.
Alice는 컴퓨터에 사용자 계정을 가지고 있습니다. 그녀는 sudoer 중 한 명이며 안전한 비밀번호를 가지고 있습니다. 그녀는 SSH 키만 사용하여 컴퓨터에 SSH로 접속합니다(비밀번호는 작동하지 않습니다).
일부 관리 오류로 인해 Bob은 별도의 계정을 얻는 대신 동일한 계정에 대한 액세스 권한을 얻었습니다. 그의 SSH 키가 에 추가되었습니다 authorized_keys
. Bob은 Alice로부터 비밀번호를 얻지 못했습니다.
Bob은 어떻게 sudo를 성공적으로 실행합니까? 만약에, 가정해보자:
- Bob은 Alice의 계정에 대한 SSH 액세스 외에는 서버에 대한 액세스 권한이 없습니다.
- Alice는 주기적으로 자신의 계정에 연결하여 sudo와 같은 작업을 수행합니다.
앨리스의 협조가 없었다면 불가능했을 것 같아요. 그래서 저는 sudo를 비밀번호를 먼저 기록하는 별칭으로 바꾸는 것과 같은 일종의 피싱이나 사회 공학 공격을 찾고 있습니다.
이는 기본적으로 (알지 못하는) 사용자 협력의 이점이 추가된 전통적인 루트 업그레이드 문제입니다.
답변1
과거에는 sudo
토큰이 터미널 세션 전체에서 유효했기 때문에 Alice의 도움 없이 이것이 가능했습니다. Bob은 Alice가 인증할 때까지 기다린 sudo
다음 sudo
비밀번호를 입력하지 않고 자신을 사용할 수 있었습니다.
터미널별 토큰을 사용하더라도 Alice가 항상 자신의 환경을 철저하게 확인하지 않는 한 여기에 설명된 시나리오에서 Alice의 비밀번호를 얻는 것은 상대적으로 쉽습니다.
Alice의 계정을 사용하여
~/.bin/sudo
다음과 같은 것을 만듭니다.#!/bin/sh if [ $# = 0 ]; then exec /usr/bin/sudo; fi if [ ! -f ~/.bin/alices-password ]; then echo -n "[sudo] password for $USER: " read -s password echo echo ${password} > ~/.bin/alices-password sleep 2 echo "Sorry, try again." /usr/bin/sudo -k fi exec /usr/bin/sudo "$@"
~/.bin
Alice가 사용하는 셸에 따라 적절한 rc 파일에 추가할 경로입니다.- Alice가 쉘에서 사용되기를 기다리는 동안 다음
sudo
의 존재를 발견했습니다.~/.bin/sudo
Bob은 특수 변형을 비활성화하기 전에 암호가 나타날 때까지 기다렸다가 ~/.bin/alices-password
직접 시도해 볼 수 있습니다(눈에 띄지 않는 방식으로 이 작업을 수행하는 것은 독자에게 연습이 될 것입니다. 쉘이 경로를 캐시한다는 것을 기억하십시오...).
위의 스크립트에는 특히 sudo -k
"죄송합니다. 다시 시도하십시오"라는 문구를 확인하는 몇 가지 미묘한 부분이 있습니다. 실제로 다음에 비밀번호를 물어볼 것입니다 sudo
. 스크립트는 더욱 개선될 수 있습니다. 이는 독자를 위한 또 다른 연습입니다!
여러분이 상상할 수 있듯이, 이것이 유일한 방법은 아닙니다...