ricardo
시스템에서 번거로운 사용자 인 user에 대한 제한된 사용자 계정을 설정하고 있습니다. 나는 그를 사용하여 디렉토리를 만들 수있는 권한을 부여하고 싶습니다 sudo
. 내 /etc/sudoers
파일 에서이 규칙을 고려하고 있습니다.
ricardo ALL=(root) NOPASSWD: /bin/mkdir
이 규칙 만 사용하면 ricardo가 의도적으로 또는 실수로 시스템을 손상시킬 수있는 방법이 있습니까?
ricardo
시스템에서 번거로운 사용자 인 user에 대한 제한된 사용자 계정을 설정하고 있습니다. 나는 그를 사용하여 디렉토리를 만들 수있는 권한을 부여하고 싶습니다 sudo
. 내 /etc/sudoers
파일 에서이 규칙을 고려하고 있습니다.
ricardo ALL=(root) NOPASSWD: /bin/mkdir
이 규칙 만 사용하면 ricardo가 의도적으로 또는 실수로 시스템을 손상시킬 수있는 방법이 있습니까?
답변:
«something»은 rootfs가 마운트 된 후에로드를 시도하는 커널 모듈 인 다음과 같은 공격이 효과가있을 것으로 생각됩니다.
$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko
모듈에 선언 된 별명에 따라 다른 이름을 사용할 수도 있습니다. depmod가 실행될 때까지로드되지 않을 것입니다. 다음 번에 커널 업데이트가있을 때 발생하므로 mkdir
sudo 로그에 최근에 표시되지 않습니다.
/ etc에는 디렉토리의 모든 파일을 재귀 적으로 읽는 많은 것들이 있습니다. 더 나쁜 것은 이러한 디렉토리 중 일부는 기본적으로 존재하지 않으며 디렉토리를 사용하는 프로그램에 대한 맨 페이지, 초기화 스크립트 등을 읽는 것입니다. 심지어 더 나쁜 것은 이전 버전과의 호환성이 더 이상 사용되지 않으며 더 이상 문서화되지 않을 수도 있습니다.
편집 : 몇 가지 디렉토리가 더 있다고 생각했습니다 /usr/local
.
/usr/local/lib/perl/5.14.2
(펄 버전에 따라 다릅니다 perl -V
.) File
거기 에 서브 디렉토리를 작성하고 Find.pm
그것을 넣으 십시오. 이제 누구나 누구나를 사용할 때마다 File::Find
공격자의 버전을 사용하게됩니다. 마찬가지로와 동일하게 수행하십시오 Getopt::Long
. 시스템 유틸리티는 종종 Perl로 작성되므로 루트가 될 수 있습니다. (보십시오 ack-grep --color -a 'use.+::' /usr/sbin | less -R
)/usr/local/include
.sudo mkdir
디렉토리를 사용하여 그가 할 수있는 새 디렉토리를 만들었습니다.
mkdir
루트 로 실행함으로써 , 사용자는 이전에 동일한 이름 (및 / 또는 잘못된 권한)을 가진 디렉토리를 작성하여 다른 프로세스 / 사용자가 새 파일 및 디렉토리를 작성하는 것을 차단할 수 있습니다.
이것은 특히 로그 및 잠금 파일 과 관련된 보안 일 수 있습니다 .
마찬가지로 jordanm는 주목의 최대 개수 의 inode는 또한 전체 시스템을 차단할 수까지 사용할 수있다.
특정 그룹에 사용자를 추가하거나 ACL을 사용 하면을 통해 권한을 부여하지 않고도 문제를 해결할 수 있습니다 sudo
.
mkdir
ricardo가 사용할 수있는 명령 목록을 생략 할 것입니다.
for((i = 0;; i++)); do touch $i; done
을 수행하면됩니다 (부 시즘, 미안하지만 아이디어를 얻습니다).
sudo
OP가 고려 하고있는 다른 명령들도 아이 노드를 소진시킬 수있다. OP는 해당 DoS 벡터를 알고 있어야합니다.
쓰기 권한이있는 디렉토리를 만들 수 있기 때문에 가능성이 있습니다. 함께 사용자가 새로운 디렉토리에 원하는대로 쓸 수 있습니다. 디렉토리 트리를 되풀이하여 구성, 스크립트 또는 모듈을로드하는 다른 사용자로 이미 실행중인 시스템에서 프로세스가 필요합니다. 그런 다음 사용자는로드하거나 실행할 자신의 항목을 추가 할 수 있습니다. 내가 생각할 수있는 첫 번째 것은 PHP 또는 CGI를 실행할 수있는 웹 서버를 실행하는 것입니다. 그런 다음 해당 사용자로 스크립트를 실행할 수 있습니다. 나는 더 실제적인 예, 특히 그 예를 생각해 내기 위해 고심하고 있지만 확실합니다. mkdir -m 777 blah
ricardo
root
ssh는 이런 종류의 시나리오를 잡아내는 데몬의 예입니다. .ssh
디렉토리가없는 사용자 의 디렉토리를 작성하고 자신의 authorized_hosts
파일을 제자리에 둔 경우 sshd
디렉토리 권한이 너무 열려 있고 공개 키를 무시합니다.
많은 프로그램이 잘 처리하지 못하는 파일 (예 : 임시 tmp 또는 스왑 파일)이 켜질 것으로 예상되는 디렉토리를 작성하는 것은 확실히 귀찮게 만들 수 있습니다.
많은 cgroup을 만들 수는 있지만 아무 것도 수행하지 않는 것 같습니다. 적어도 무릎을 꿇고 시스템을 가져올 수 있습니다. OOM 킬러 가 sshd를 꺼내려면 256M 상자에 약 10000 cgroup이 필요했습니다 .
환경 의 -m
옵션 mkdir
과 UMASK 를 제어하면 sudo
귀찮은 것으로 돌아갑니다.