그만큼UNIX 및 Linux 시스템 관리 핸드북말한다:
man은 적절한 디렉토리에 쓰기가 가능한 경우 /var/cache/man 또는 /usr/share/man에 형식화된 페이지의 캐시를 유지합니다. 그러나 이는 보안상 위험합니다. 대부분의 시스템은 설치 시 매뉴얼 페이지를 한 번 미리 포맷하거나(catman 참조) 전혀 포맷하지 않습니다.
여기서 "보안 위험"이란 무엇입니까?
누군가가 매뉴얼 페이지를 변경하여 (초보) 사용자를 속여 바람직하지 않은 것을 실행할 수 있다는 명백한 보안 위험이 있습니다.Ulrich Schwartz의 답변하지만 저는 이것을 악용할 수 있는 다른 방법을 찾고 있습니다. 감사해요!
답변1
다른 사용자가 사용할 매뉴얼 페이지의 내용(또는 실제 데이터)을 사용자가 조작하도록 허용하는 것은 안전하지 않습니다.캐시 중독. 오래된 BOFH 농담은 다음과 같습니다.
시스템에 대한 모든 것을 루트부터 배우려면 다음과 같이 "더 빠르게 읽기" 스위치와 함께 "설명서 읽기" 명령을 사용하십시오.
rm -rf /
(확실하게,하지 마라이 명령을 실행하십시오.) 그러나 맨 페이지 캐시를 제어하는 경우 "rm - 파일 또는 디렉토리 제거"가 아니라 실제로 "rm - 매뉴얼 읽기"임을 man rm
알려주는 캐시된 가짜 맨 페이지를 보려고 입력할 수도 있습니다 . rm
또는쉘에 코드를 삽입하는 출력 터미널 이스케이프 시퀀스.
답변2
문제의 시스템이 웹 서버라고 가정해 보겠습니다. 또한 서버 관리자가 시스템에 설치된 일부 소프트웨어를 웹 페이지를 통해 일반 대중(또는 기업 인트라넷)에게 제공한다고 가정해 보겠습니다. 이미지 크기 조정 도구, 계산기 또는 사전처럼 간단할 수도 있습니다.
소프트웨어가 설치될 때 관련 매뉴얼 페이지가 있었다면 친절하고 사려 깊은 관리자는 해당 매뉴얼 페이지를 웹 서비스 사용자가 사용할 수 있도록 만드는 것도 좋은 생각이라고 결정할 수 있습니다.
따라서 웹페이지의 '도움말' 아이콘은 하나 이상의 스크립트를 시작합니다.캐시된— 매뉴얼 페이지를 작성하여 사용자의 브라우저로 보냅니다.
캐시 디렉터리에 대한 쓰기 액세스 권한이 있는 사람이나 코드는 해당 파일을 다음과 같이 수정할 수 있습니다.
- 사용자의 브라우저를 방문하여 실행될 임의의 Javascript를 주입합니다.
- 모든 방문 사용자로부터 원격 측정 데이터를 수집하고 나중에 처리/프로파일링하기 위해 일부 저장소로 전달합니다.
- 인증 자격 증명 수집 — 시스템의 권한 있는 사용자(예: 관리자)의 자격 증명도 가능
위의 각 사항은 상상력과 느슨한 도덕/윤리를 가진 사람이라면 누구나 매우 다양한 방식으로 남용할 수 있습니다.
답변3
디렉토리가 전역적으로 쓰기 가능해지면 보안 결함이 발생합니다. 디렉토리의 의도된 목적이 무엇인지, 그것이 어떻게 파괴될 수 있는지 무시하고, 단지 쓰기 가능하게 만드는 것은 문제입니다.
다음은 디렉터리 기능과 관련되지 않은 몇 가지 가능한 문제입니다.
- 사용자가 쓸 수 있는 파일 시스템에 다른 디렉터리가 없는 경우 이는 모든 사용자에게 다른 방법으로는 사용할 수 없는 해당 파일 시스템의 공간을 사용할 수 있는 방법을 제공합니다.
- 모든 사용자는 디렉터리에 파일을 저장하여 파일 시스템을 가득 채워 서비스 거부 공격을 일으킬 수 있습니다. /var/log와 동일한 파일 시스템인 경우 로그가 기록되지 않을 수 있습니다.
- 예상 위치 외부의 이 디렉터리에 파일이 숨겨질 수 있습니다. 이는 계정 삭제 후에도 지속될 수 있으며, 파일 시스템이 이상하게 가득 차면 찾기 어려울 수 있습니다.
- 파일이나 디렉터리가 향후 캐시된 파일과 동일한 이름으로 생성되면 디렉터리의 의도된 용도가 올바르게 작동하지 않을 수 있습니다(해당 파일의 내용 자체가 악의적이지 않더라도). 해당 파일에 대한 권한을 조정하면 자동으로 수정하기가 더 어려워질 수 있습니다.
답변4
대부분의 최신 배포판은 적절한 패키지가 설치될 때 매뉴얼 페이지를 사전 캐시합니다(troff로 처리하여). 이것은 문제가 되지 않습니다.
문제는 원본 man 파일이 있지만 캐시가 비어 있는 경우(즉, 캐시 파일이 미리 생성되지 않은 경우) 발생합니다.
이를 처리하는 방법에는 두 가지가 있습니다.
- troff를 통해 맨페이지 실행매번사용자로서
- 다음과 같이 troff를 통해 매뉴얼 페이지를 한 번 실행하십시오.뿌리캐시 디렉토리에 저장
루트맨으로 실행하려면 setuid가 필요합니다. 보안상의 결함이 있었다면아무것예를 들어 명령줄 구문 분석을 통해 공격자는 높은 권한을 얻을 수 있습니다.
관련 소스는 다음과 같습니다.https://git.savannah.gnu.org/cgit/man-db.git/tree/src/man.c
다행스럽게도 모든 주요 배포판은 이제 매뉴얼 페이지를 사전 캐시하므로 걱정할 필요가 없습니다.