공격자가 mkdir을 사용하여 시스템을 손상시킬 수 있는 방법이 있습니까?

공격자가 mkdir을 사용하여 시스템을 손상시킬 수 있는 방법이 있습니까?

ricardo내 시스템에 문제를 일으키는 사용자인 사용자에 대해 제한된 사용자 계정을 설정하고 있습니다 . 나는 그에게 sudo때때로 필요한 프로덕션 디렉토리 사용 권한을 부여하고 싶습니다 . 나는 내 파일 /etc/sudoers에서 다음 규칙을 고려하고 있습니다 .

ricardo   ALL=(root) NOPASSWD: /bin/mkdir

이 규칙만 사용하면 Ricardo가 의도적으로 또는 의도치 않게 시스템을 깨뜨릴 수 있을까요?

답변1

나는 이와 같은 공격이 작동할 것이라고 생각합니다. 여기서 "무언가"는 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 버전에 따라 다르므로 perl -V알아보세요.) File거기에 하위 디렉터리를 만들고 Find.pm. 이제 누군가가 이를 사용할 때마다 File::Find공격자의 버전을 사용하게 됩니다. 마찬가지로 에도 동일한 작업을 수행합니다 Getopt::Long. 시스템 유틸리티는 일반적으로 Perl로 작성되므로 루트 권한을 제공할 수 있습니다. (노력하다 ack-grep --color -a 'use.+::' /usr/sbin | less -R)
  • Python, Ruby 등에도 비슷한 디렉토리가 있다고 생각합니다. 시스템 유틸리티도 Python으로 작성되었습니다.
  • 어떤 사람들은 /usr/local/include.

답변2

루트로 실행하면 mkdir사용자는 이전에 동일한 이름(및/또는 잘못된 권한)으로 디렉터리를 생성하여 다른 프로세스/사용자가 새 파일 및 디렉터리를 생성하는 것을 방지할 수 있습니다.

이는 특히 로그 및 보안과 관련이 있을 수 있습니다.잠그다-문서.

~처럼요르단참고로 최대 개수는인덱스 노드또한 소진되어 전체 시스템이 막힐 수도 있습니다.

특정 그룹에 사용자를 추가하거나 다음을 사용하여ACL), 귀하는 어떠한 권리도 부여하지 않고도 문제를 해결할 수 있습니다 sudo.

답변3

그를 chroot 감옥으로 리디렉션해야 합니다. 또는 소규모 가상 머신의 경우 한 시간에 한 번씩 충돌이 발생할 수 있다는 것이 더 좋습니다. 귀하가 해야 할 일은 새 사본을 제공하는 것뿐입니다.

답변4

쓰기 액세스 권한이 있는 디렉터리를 생성할 수 있기 때문에 가능성이 존재합니다. 사용자는 원하는 대로 새 디렉터리에 mkdir -m 777 blah쓸 수 있습니다. ricardo구성, 스크립트 또는 모듈을 로드하기 위해 디렉토리 트리를 반복하는 다른 사용자로 이미 실행 중인 시스템 프로세스가 있어야 합니다. 그런 다음 사용자는 자신만의 항목을 추가하여 로드하거나 실행할 수 있습니다. 내 첫 번째 생각은 PHP 또는 CGI를 수행할 수 있는 웹 서버를 실행하는 경우입니다. 그런 다음 해당 사용자로 스크립트를 실행할 수 있습니다. 나는 더 많은 실제 사례, 특히 root그것이 확실하다고 확신하는 사례를 생각하려고 노력하고 있습니다.

ssh는 이러한 상황을 포착하는 데몬의 예입니다. .ssh디렉토리가 없는 사용자를 위해 디렉토리를 생성하고 authorized_hosts적절한 위치에 자신의 파일을 저장하는 경우 . sshd디렉터리 권한이 너무 개방적이어서 공개 키를 무시합니다.

많은 프로그램이 제대로 처리하지 못하는 파일이 존재할 것으로 예상되는 디렉터리(예: 임시 tmp 또는 스왑 파일)를 생성하면 문제가 발생할 수 있습니다.

많은 cgroup을 생성할 수 있지만, cgroup으로 아무 작업도 수행하지 않는 것 같습니다. 최소한 시스템을 무릎꿇게 만들 수는 있습니다. 256M 상자에는 약 10,000개의 cgroup이 필요합니다.OOM 킬러sshd를 제거하세요.

-m환경 옵션 mkdir과 UMASK를 조절하면 sudo또 번거로워지는 것 같아요.

관련 정보