사용자가 실행 파일을 만들어 실행하지 못하도록 막을 방법이 있습니까?


31

랜섬웨어 공격은 제로 데이 익스플로잇을 사용할 수 있지만 공격자는 다운로드 및 클릭을 통해 실행 가능한 사용자를 속일 수 있습니다.

순진한 사용자가 있고 일반 경로로 제한하려고한다고 가정하십시오. 실행 권한이있는 파일을 만들 수 없도록 제한하는 방법이 있습니까?

또는 더 일반적으로 액세스 제어 목록을 작성하고이 사용자가이 목록의 파일 만 실행할 수 있도록 정의 할 수있는 방법이 있습니까?


7
이러한 방식으로 실행을 비활성화하면 사용자가 시스템에서 작업을 수행 할 수 없습니다 . 이러한 유형의 보안 잠금을 수행하는 것으로 알고있는 시스템에 내장 된 시스템이나 타사 소프트웨어를 사용하는 메커니즘은 없습니다
Thomas Ward

3
사용자가 쓸 수있는 마운트에 noexec를 추가하십시오. 스크립트를 막지는 않지만 실제 이진 실행을 방지합니다.
삼포 사라 라

3
@ThomasWard, 그것이 제한된 쉘이 정확히 무엇입니까?
Robert Riedl

7
@ThomasWard는 (일반적으로 서명 된) 실행 파일의 특정 목록이 허용되고 승격 된 권한 없이는 다른 것을 실행할 수없는 '허용 된 실행 파일'이라는 일반적인 개념이 있습니다. Windows와 OS X 모두이를위한 합리적인 솔루션을 제공합니다. 그래도 응용 프로그램 허용 목록에 적합한 우분투 (또는 다른 Linux) 솔루션이 있는지 모르겠습니다.
Peteris

2
@Peteris에는 여러 가지 솔루션이 있습니다. 내가 가장 좋아하는 것은 실행 파일이있는 서명 된 읽기 전용 파일 시스템을 가지고 있으며 noexecChromeOS가 dm_verity루트 파일 시스템 무결성을 보장 하는 방법에 따라 다른 모든 것을 마운트하는 것 입니다. 하드 코어를 잘 모르는 사람들은 EVM 모듈을 사용할 수 있습니다. Gentoo의 문서는 wiki.gentoo.org/wiki/Extended_Verification_Module 을 참조하십시오 .
Charles Duffy

답변:


50

우려를 표명 한 구체적인 공격은 다음과 같습니다.

종종 공격자는 다운로드 및 클릭을 통해 실행 가능한 사용자를 속이는 사용자를 속일 수 있습니다.

적어도 파일이 웹 브라우저에서 다운로드되는 일반적인 경우에, 우분투에서는 브라우저가 Execute-Permission Bit Required 정책을 준수함으로써 이미이를 방지해야 합니다 . 해당 정책에서 가장 직접적으로 관련된 부분은 다음과 같습니다.

  • 데스크탑 및 쉘을 포함한 응용 프로그램은 파일이 둘 다일 때 파일에서 실행 코드를 실행해서는 안됩니다.

    • 실행 가능한 비트 부족
    • 사용자의 홈 디렉토리 또는 임시 디렉토리에 있습니다.
  • 웹 브라우저, 메일 클라이언트 등에서 다운로드 한 파일은 실행 파일로 저장해서는 안됩니다.

따라서 사용자에게 웹 브라우저에서 프로그램을 다운로드하라는 메시지가 표시되면 두 번 클릭하여 파일을 실행하려고 시도하면 실행되지 않습니다. 이것은 다운로드 한 파일이 셸 스크립트 또는 .desktop 파일 인 경우에도 적용됩니다. ( 홈 디렉토리의 .desktop 파일실제로 프로그램 이 아니더라도 실행 파일로 표시되어야하는 이유가 궁금하다면 , 그 이유입니다.)

사용자는 구성 변경을 통해이 동작을 변경할 수 있습니다. 대부분의 사람들은 그렇지 않을 것입니다. 아마 그렇게하지 말아야 할 사람들은 그렇게 걱정하지 않아도됩니다. 더 큰 문제는 당신이 이미 악의적 인 사람 (또는 봇) 특정 파일을 다운로드하는 사용자를 지시하는, 걱정 생각보다 복잡한 공격이다, 그것은 자신을 실행 표시 (자신의 파일 브라우저를 통해 또는과 chmod), 및 그런 다음 실행하십시오.

불행히도, 사용자가 파일에서 실행 비트를 설정하거나 일부 허용 목록에있는 파일 이외의 파일을 실행하는 기능을 제한해도 문제가 눈에 띄게 완화되지는 않습니다. 일부 공격은 이미 작동하고 사소하게 수정 될 수없는 공격도 가능합니다. 근본적인 문제는 파일에 실행 권한이없는 경우에도 파일 실행 효과를 얻을 수 있다는 것 입니다.

이것은 예를 통해 가장 잘 설명됩니다. 한다고 가정은 evil현재 디렉토리, 그 경우 주어진 실행 권한 (의 파일 chmod +x evil)과 실행 ( ./evil뭔가 악을 할 것이다). 프로그램의 종류에 따라 다음 중 하나에 의해 동일한 효과를 얻을 수 있습니다.

마지막 것까지도 파일에 실행 권한이 있거나 사용자가 파일 실행 권한을 부여 할 필요 가 없습니다.

그러나 악의적 인 지시조차 그렇게 복잡 할 필요는 없습니다. NVM을 설치하거나 업데이트하기 위해 공식적으로 권장되는 방법 중 하나 악성아닌 명령을 고려하십시오 .

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

악의적이지 않은 이유는 NVM이 악성 코드가 아니기 때문에 URL이 실행시 악의를 가진 다른 사람의 스크립트 인 경우 해당 명령이 스크립트를 다운로드하여 실행하는 것입니다. 어떤 파일에도 실행 권한을 부여 할 필요는 없습니다. 이와 같은 단일 명령으로 악성 파일에 포함 된 코드를 다운로드하고 실행하는 것은 공격자가 사용자를 속이는 일반적인 행동이라고 생각합니다.

사용자가 실행할 수있는 통역사를 제한하려고 할 수 있습니다. 그러나 실제로 사용자가 할 수 있기를 원하는 일반적인 작업에는 실질적으로 영향을 미치지 않는 방법은 없습니다. 몇 개의 프로그램 만 실행하는 키오스크와 같이 컴퓨터에서 사용자가 생각하는 거의 모든 것이 허용되지 않는 매우 제한적인 환경을 설정하는 경우 이는 의미있는 보호 수단을 제공 할 수 있습니다. 그러나 그것은 당신의 유스 케이스처럼 들리지 않습니다.

따라서 귀하의 질문에 대한 대략적인 답변은 "아니오"입니다. 더 완전한 대답은 사용자가 허용 목록에 제공 한 파일을 제외하고 사용자가 파일을 실행하지 못하도록 관리 할 수 있다는 것입니다 . 그러나 그것은 "실행"이라는 엄격하고 기술적 인 의미에 있으며 대부분의 프로그램이나 스크립트를 실행하는 데있어 완전한 효과를 얻는 데 필요하지 않습니다. 방지하기 위해 것을 , 당신이 만들려고 수있는 아주 작은, 그래서 그것은 매우 제한 될 수있는 경우를 제외하고 모든 통역을 나열하지 않았다 화이트리스트. 그러나 당신이 그것을 관리하더라도 사용자는 많은 것을 할 수 없었고, 너무 작게 만들면 스스로 다 치지 않을 것입니다. 아마도 아무것도 할 수 없었습니다. ( 토마스 워드의 의견 참조 )

사용자가 자신을 다치게하면 자신을 다치게 할 수 있습니다.

특정 프로그램이 사용되거나 유해 할 수있는 방식으로 동작하는 것을 제한 할 수 있으며 특정 패턴 랜섬웨어가 따르는 경향이있는 경우 특정 일반적인 경우를 방지 할 수 있습니다. ( AppArmor 참조 ) 일부 값을 제공 할 수 있습니다. 그러나 원하는 포괄적 인 솔루션에 가까운 것은 아닙니다.

어떤 기술적 조치 (있는 경우)를 취하 든 가장 좋은 방법은 사용자를 교육하는 것입니다. 여기에는 그들이 이해하지 못하는 명령을 실행하지 말고, 왜 그렇게 안전한지 설명 할 수없는 상황에서 다운로드 한 파일을 사용하지 말라고 지시하는 것이 포함됩니다. 그러나 백업을 만드는 것과 같은 것들도 포함되어 있기 때문에 (맬웨어 등으로 인해) 문제가 발생할 경우 가능한 피해는 거의 없습니다.


6
아마도 비 기술적 인 조치에는 자신이하고 싶은 일을 온전히 점검 할 수있는 사람을위한 연락처 정보가 포함되어야합니다 . 확실하지 않은 경우 언제든지 전화 나 메시지를 보내 문의하십시오. 그것은 추측하려는 유혹을 제거 할 수 있습니다.
Peter Cordes


Minor nit : " . ./evil또는 " source ./evil에서 명령 실행 evil.sh-해당 source명령은 evil확장자를 지정하지 않으면 명령을 실행합니다 ( 예. ./evil.sh
추가 통지가있을 때까지 일시 중지됨).

@DennisWilliamson 감사합니다-고정되었습니다! 그것은 다른 스크립트 이름을 사용한 답변의 오래된 (제출되지 않은) 거친 초안에서 남았습니다. 나는 그것이 어리 석다는 것을 금방 깨달았지만 모든 사건을 바꾸는 데 실패한 것 같습니다.
엘리아 카간

1
"이 스크립트를 가져 와서 실행"하는 소프트웨어를 설치하거나 업데이트하는 방법을 볼 때마다 발톱이 약간 구부러집니다. 어떤 사람이 단일 문자로 꺼져 있거나 O 대신 0을 사용하거나 모호하게 UTF-8 문자를 사용하여 자신의 악성 스크립트를 고수하는 GitHub 계정 / 저장소를 만드는 것을 막을 수있는 것은 없습니다 ... 그냥 필요한 것은 하나입니다 wget 명령과 bam에 오타가 있습니다.
이안 켐프

11

*


이를 제한된 쉘이라고합니다.

/bin/rbash우분투에서 이미 사용 가능한을 사용 하고이를 제한된 PATH 변수 와 결합 할 수 있습니다 . 에없는 경우에는 rbash실행이 금지됩니다 $PATH.

제한된 사용자 추가 :

sudo adduser --shell /bin/rbash res-user

바이너리를 연결할 수있는 새 디렉토리를 만들어 사용자가 다음으로 제한되도록합니다.

sudo mkdir /home/res-user/bin

.profile파일을 수정 하십시오.

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

만들기 기능 .profile, bashrc그리고 .bash_profile불변 :

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

이제 우리는 사용자에게 그가 할 수있는 유일한 일, 즉 Firefox를 엽니 다 :

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

이제 로그인하면 res-userFirefox 만 열 수 있습니다.

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

우리는 제한된 쉘을 쉽게 벗어날 수 없습니다.

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

제한된 사용자는 파일을 실행 가능하게 만들거나 시작할 수 없습니다.

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

사용자가 필요한 명령을 실행할 수 없기 때문에 제한된 사용자는 인터넷에서 악의적 인 스크립트를 실행할 수 없습니다.

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

* 제한된 쉘 에서 벗어날 수 있는 방법이 있지만, 사용자가 그렇게 할 수 있다면 생각하기 어려운 것처럼 보이지 않을 수 있습니다.


2
이것은 " 컴퓨터에서 사용자가 생각하는 거의 모든 것이 허용되지 않는 매우 제한된 환경 "을 달성하려고 시도합니다 (내 대답에 넣었을 때). res-user그래픽으로 로그인 할 수 없습니다. 그들이 할 수있는 유일한 유용한 일은 ssh -Xin and run firefox입니다. 더 많은 명령을 허용하여 사용자가 작업을 수행 할 수 있습니다. 그러면 헤어지는 것이 쉬워집니다. 연결된 방법 중 몇 가지를 하나의 라이너 (공격자가 제공 할 수있는)로 만들 수 있습니다. 사용자가 제한을 방해하는 것을 발견하면 예전처럼 정통하거나 속기 쉬운 상태를 유지하면서이를 우회하는 전문가가됩니다.
Eliah Kagan

1
@EliahKagan 예, 맞습니다. 사용자가 필요로하는 모든 것을 연결해야합니다. 그러나 이것은 접근 통제 목록을 작성하고이 사용자가이 목록에있는 파일 만 실행할 수 있도록 정의 할 수있는 방법이 [...] 매우 가깝습니다 . 따라서 OP에 도움이 될 수 있습니다. 이 껍질을 벗기는 것은 불가능하지 않지만 꽤 어렵습니다. 특정 리소스 또는 점프 호스트에 대한 외부 액세스를위한 유사한 설정이 있습니다. 제한된 셸 설정에 대한 광범위한 공격이 있는지 의심합니다 .... 공격자가 환경을 알고 있는 표적 공격을 처리하는 경우 모든 베팅이 중단됩니다.
Robert Riedl

4
각주를 답변의 첫 줄로 올릴 것입니다.
추후 공지가있을 때까지 일시 중지되었습니다.

키오스크 모드 또는 다른 강화 된 브라우저에서 크롬을 사용하는 것이 좋습니다. 매우 높은 권한과 시스템 명령 실행으로 firefox 플러그인 또는 확장 프로그램을 설치하는 것이 매우 쉽습니다. 파이어 폭스에서는 최신 버전을 사용하고 확장자를 허용하지 않아야합니다.
Benjamin Gruenbaum

추가 보호를 위해 noexec 옵션으로 마운트 된 파일 시스템에 대한 쓰기 권한 만 사용자에게 제공하십시오.
Dan D.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.