맬웨어가 sudo 비밀번호를 스니핑하지 못하도록 방지


10

sudoLinux 컴퓨터를 감염시키는 맬웨어에 대한 주요 장벽 중 하나로 인용 하는 사람들이 종종 있습니다.

가장 일반적인 주장은 다음과 같은 내용을 따르는 것 같습니다. 시스템 구성을 수정하려면 루트 권한이 필요하고 루트 권한을 얻으려면 암호가 필요하므로 맬웨어는 암호를 묻지 않고 시스템 구성을 수정할 수 없습니다.

그러나 대부분의 시스템에서 맬웨어가 관리자 계정에 감염되면 권한 상승은 사소한 것 같습니다. 맬웨어는 사용자가 실행되기를 기다려야합니다 sudo.

사용자가 실행할 때 멀웨어가 루트 권한을 얻는 방법은 무엇 sudo이며 어떻게이를 방지 할 수 있습니까?

편집 : 특히 손상된 관리자 계정으로부터 보호하는 데 관심이 있습니다. 즉, 모든 루트 권한을 가진 sudo계정 (예 : 일반 데스크탑 시스템의 사용자 계정)입니다.


내가 찾고있는 종류의 예는 내 대답을 참조하십시오 . 나는 누군가가 거기에서 제기 된 일부 보안 위험 (또는 생각할 수있는 다른 보안 위험)에 대해 자세히 설명하고이를 완화 할 수있는 방법을 제공하기를 희망합니다.
Zaz

Windows에서 UAC 또는 보안주의 순서와 같은 것을 요청합니다. 유닉스 시스템에는 없습니다. 관리자를위한 방법은 어리석은 일에 자신의 계정을 사용하지 않는 것입니다. SELinux 또는 Grsecurity와 같은 역할 기반의 필수 액세스 제어 시스템을 사용하여 자신의 답변에서 언급 한 몇 가지 사항을 방지 할 수 있습니다. 여기서 루트가 아닌 쓰기 가능 바이너리를 실행할 수없는 정책을 설정할 수 있으므로 해당 수준의 트로이 목마는 없습니다. Btw, X를 신뢰하지 않으면 X는 수퍼 유저 권한으로 실행되므로 시스템을 전혀 신뢰하지 마십시오.
카운터 모드

감사합니다. SELinux를 살펴 봤지만 대규모 설치를 위해 더 많이 설계된 것으로 보이며 관리 및 설정에 많은 시간이 필요합니다. 나는 조금 더 간단한 것을 바랐다. 저는 개발자이므로 프로그램 실행에 관한 엄격한 정책은 실제로 옵션이 아닙니다.
Zaz

"X는 수퍼 유저 권한으로 실행됩니다"— 무엇? 의 기본 설치에 X , startx일반 사용자로 잘 작동합니다. 사실, 저는 현재 일반 사용자로 X 를 실행 하고 있습니다.
Zaz

예, 학습 곡선이 가파 릅니다. Grsecurity를 ​​살펴보면 간단하지만 강력합니다. ~ X의 특권 : 필자의 상자에서 X 서버는 SUID 루트이며 루트를 실행합니다.
카운터 모드

답변:


9

일단 맬웨어가 사용자 계정에 액세스하면 다음을 수행 할 수 있습니다.

1. 프롬프트 ~/.bashrc를 위조 [sudo] password for $USER:하고 사용자의 비밀번호를 훔치는 명령에 대해 bash 별명 (현재 쉘 및 )을 작성하십시오 .

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'

2. 마찬가지로,라는 실행 배치 가능 sudo하여 ~/.bin, 상기 변경 PATH과 동일한 효과를 얻기 위해 변수 :PATH="$HOME/.bin:$PATH"

3. X 서버를 통해 키 누름을 누르고 단어 sudo를 찾은 후 다음 두 Enter키 누름 사이의 텍스트를 암호로 사용해보십시오 .

4. 예를 사용하여 모든 환경 (콘솔, Wayland , X) 에서 유사한 작업을 수행 할 수 있습니다 $LD_PRELOAD.

5. 만약 악성 코드가 감염 사용하는 쉘 sudo, 그리고 sudo그것을 할 수 있다면 캐시 자격 증명, 악성 코드가 continouosly 확인할 수 있습니다 sudo암호가없는 :

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"


예방:

1 & 2. 사용 \/bin/sudo. 는 \별칭 및 무시 /bin/…무시를 $PATH. 또는 다음과 같은 별칭을 추가 ssudo="\/bin/sudo"하고 항상 ssudo대신 사용하십시오 sudo. 바이러스가이 별칭을 다시 매핑 할만큼 영리한 것 같지는 않습니다.

3. X11을 사용할 때 비밀번호를 입력하지 마십시오. 대신 가상 콘솔 또는 Weston을 사용하십시오 .

5. 설정 timestamp_timeout=0에서 /etc/sudoers.


sudo암호가 스니핑 될 가능성을 완전히 없애는 유일한 방법은 암호를 완전히 피하는 것 같습니다. 대신 가상 콘솔에 루트로 로그인하십시오.

Alexander Peslyak에 따르면 : "su [및 sudo]의 유일한 안전한 사용은 더 권한있는 계정에서 덜 권한있는 계정으로 전환하는 것입니다."


참고로 sudo에는 몇 가지 대책이 있습니다.

  • sudotty대신 에서 읽으 stdin므로 alias sudo='tee -a /tmp/sudo-password | sudo'중단됩니다 sudo(그러나 비밀번호는 캡처 함).

sudo는 사용자 비밀번호를 묻기 때문에 맬웨어는 이미 액세스 한 사용자의 비밀번호를 캡처합니다.
rob

3
@rob : 실제로 sudo구성 방법에 따라 다르지만 , 어느 쪽이든 맬웨어는 이제 필요한 암호를 가지 sudo므로 사용자가 루트 액세스 권한을 가지고 있으면 맬웨어도 마찬가지입니다.
Zaz

3

실제 보호는 없습니다.

sudo에 대한 암호로 보호 된 액세스는 shim에 의해 실행되는 명령으로 복잡한 쉘 환경 이전 시대로 거슬러 올라갑니다. 암호가 제출되면, shim이 sudo를 통해, 통지없이, 그리고 시스템을 완전히 제어하여 명령을 실행할 수있는 기회 창이 있습니다.

액세스하려는 경우 bash 및 zsh 및 fish 등에 유용한 shim을 작성합니다. 실행 된 명령을 모니터링합니다. sudo가 0의 상태로 돌아온 직후, "sudo chmod + s / bin / sh"또는 다른 nastinesses를 발행하기 시작했습니다.

sudo에 만족스러운 암호가 주어지고 프롬프트를 표시하는 명령을 실행하는 쉘이있는 순간 잠재적으로 문제가 있습니다. 낙관주의 이외의 보호는 없습니다.

다른 답변은 비밀번호 보호에 중점을 두었습니다. 침략자로서 나는 그것에 대해 걱정하지 않을 것입니다. 암호가 필요하지 않은 경우 암호가 제공된 후 지속 시간에 중점을 둡니다. 공격자가 시스템을 완전히 손상시킬 필요가 가장 적은 시간이 가장 위험합니다.

그것으로부터 보호? RC 파일을 보호해야합니다. 명령 행 프롬프트에 사용 된 심 또는 기타 명령을 검사하십시오. 쉘에 연결된 공동 프로세스와 쉘 환경을 유지하는 데 사용되는 도구를 찾으십시오. 주요 방어 수단은 호스트 침입 도구 일 것이지만 사실은 사실입니다. 공격을 방지 하시겠습니까? 복잡한 자동 구성 및 활성 프롬프트가없는 간단한 쉘만 사용합니다. 이것이 sudo가 개발 된 환경입니다.

다른 개발자 (1980 년대)와 게임을하던 곳에서 다른 개발자가 사용하던 터미널을 가져 와서 명령을 삽입하는 것을 시도했습니다. 이것은 본질적으로 같은 문제입니다. 또한 가시적 흔적없이 명령을 삽입 할 수있는 도구를 훨씬 쉽게 포함시킬 수있었습니다. :)


1

확실하지 게인 루트 권한에 대한 인증되지 않은 사용자에 대한 방법에 대한,하지만 난 당신이 만들기 위해 할 수있는 일을 알고 조금 덜 위험 당신이 그런 말을하려면를. 특정 권한을 가진 사용자 그룹과 특정 사용자가 실행할 수있는 특정 명령을 정의하기 위해 세분화 된 권한을 구성 할 수 있습니다.sudosudo

SUDO-세부 제어

  • 사용자 섹션

    여기서 명령을 지정할 사용자의 그룹을 설정할 수 있습니다. 운영 그룹을 설정할 수 있습니다.

    User_Alias  OPS = bob, jdoe 
    

    그러면 OPS 그룹이 만들어지고 이름이 bob 및 jdoe 인 사용자가 그룹에 추가됩니다.

  • Cmnd_Alias

    여기서는 특정 명령 세트를 지정합니다. 사용하려는 전체 경로와 모든 명령 옵션을 지정해야합니다. 운영 그룹 명령을 설정할 수 있습니다.

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    이렇게하면 지정된 세 가지 명령이 명령 그룹 OPSCMD에 추가됩니다.

  • 사용자 권한 사양

    여기에서 지금까지 설정 한 그룹을 사용할 것입니다.

    OPS  ALL=(root)  OPSCMD 
    

    가장 먼저 지정하는 것은 사용자입니다. 여기서는 설정 한 OPS 그룹을 사용합니다. ALL은 모든 서버에 적용됨을 의미하며, 동일한 구성 파일을 사용하는 여러 서버에서 sudo를 실행하거나 실행하는 경우에만 유용합니다. 다음으로 Operations 그룹이 지정된 명령을 실행할 사용자를 지정합니다.이 경우에는 root로 실행되기를 원합니다. 마지막으로 OPS 그룹에서 실행할 수있는 명령, 특히 설정 한 OPSCMD 그룹을 사용합니다. sudo를 사용할 때마다 비밀번호를 입력하지 않으려면 명령 스펙은 NOPASSWD : OPSCMD입니다.

sudo사용자를 믿지 않는만큼 정책을 강화하십시오. :)


질문에 대해 명확하지 않은 경우 죄송하지만 손상된 관리자 계정, 즉에 대한 모든 루트 권한이있는 계정으로부터 보호하는 데 관심이 있습니다 sudo. 특히, 나는 일반적인 데스크탑 시스템에 대해 생각하고 있습니다.
Zaz

1

손상된 시스템에 관심이있는 경우 "Rootkit"을 실행하고 "Tripwire"를 사용하여 파일 시스템의 무결성을 확인하십시오.

또한 모든 사용자가 모든 루트 명령에 액세스 할 필요가없는 대신 SUDO를 통해 특정 명령에 대한 액세스 권한을 부여하는 것처럼 sudo 권한을 강화하는 것이 좋습니다.


0

우선 /etc/sudoers파일을 살펴보십시오 .

구문은 user MACHINE=COMMANDS형식 이 됩니다.

예를 들어 루트 사용자는 루트 사용자가 root ALL=(ALL) ALL 어디에서나 모든 명령을 실행할 수 있습니다.

항목도 있으면 ALL=(ALL)루트 사용자와 거의 같습니다. 그렇지 않은 경우 특정 제한적인 권한 만있는 경우 공격자 / 악성 프로그램은 sudo 권한만큼만 수행 할 수 있습니다.

당신을 도울 수있는 팁 :

  1. /etc/sudoers파일을 검사하십시오 .
  2. chkrootkit, rootkit hunter, Config server Exploit scanner, snort 등과 같은 보안 스캐너를 실행하십시오.
  3. visudosudoers 파일의 권한을 편집하고 수정 하려면 명령을 사용하십시오 .
  4. 스캐너를 다시 실행하십시오.

참조 : sudoers 및 sudo man sudoers 의 Linux 매뉴얼 페이지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.