UNIX 세계에서는 바이너리를 실행하려면 현재 디렉터리에 바이너리 접두사를 붙여야 한다는 것이 잘 알려져 있습니다 . ./
기본적으로 .
바이너리는 없습니다 $PATH
. 이는 악의적인 바이너리가 시스템 유틸리티를 덮어쓰는 것을 방지하기 위한 것입니다(예: ls
코드 실행 가져오기).
나는 이 결정의 역사를 알고 싶습니다. 처음부터 UNIX에 있었나요? 껍질?
명확히 하고 싶습니다. 찾고 있는 것이 아닙니다.일반적인 이유왜 구현했는지 이해합니다. 나는 그것을 야기한 이벤트를 찾고 있거나 적어도 변경이 이루어졌을 때 발생한 이벤트를 찾고 있습니다.
견적을 주시면 매우 감사하겠습니다.
bash
흥미롭게도 이 내용은 실제로 포함되도록 의도된 것 같습니다 .
. 적어도 이 내용에 대한 소스는 다음과 같습니다( config-top.h
).
/* The default value of the PATH variable. */
#ifndef DEFAULT_PATH_VALUE
#define DEFAULT_PATH_VALUE \
"/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
#endif
(어떤 사람들은 이 질문의 타당성에 의문을 제기했습니다.약간의 대화Windows의 많은 실행 가능 설치 프로그램은 유사한 공격에 취약합니다. 기본적으로 실행 파일은 exec에서 DLL을 검색하므로 exec .
에 악의적인 DLL을 심으면 Downloads
일반적으로 관리자 ID 적용으로 실행되는 코드를 얻게 됩니다. “역사를 공부하지 않는 사람은 역사를 반복할 운명”이 되는 순간이다. )
답변1
이 결정에 대한 "역사적 문서"를 찾는 것은 쉽지 않지만 StackExchange 우산 아래의 다른 답변을 인용하면 귀하의 질문에 대한 가장 적절한 답변이라고 생각되는 것을 찾을 수 있습니다."sh## 발생" 상황을 피하세요.:
질문:
수년에 걸쳐 UNIX 계열 시스템(저에게 가장 관련성이 높은 Linux)에서는 기본적으로 (현재 디렉터리)가 $PATH에 나타나지 않는다는 사실을 알게 되었습니다. 왜 이런거야? 몇 년 전에 이것이 보안 문제라는 기사를 읽었던 기억이 납니다. 하지만 제가 읽은 기사에서는 문제가 정확히 무엇인지 설명하지 않았습니다. 누군가가 디렉토리에 "ls" 또는 "cp"의 악의적인 버전을 남겨두고 그것이 거기에 있다는 것을 깨닫지 못한 채 실행하게 되었기 때문입니까?
답변:
귀하의 질문에 올바르게 답변하셨기 때문에 순진한 바이러스나 정직한 실수를 방지하는 것이 요점이 아닌 이유입니다.
물론 이것은 매우 형편없고 쓸모없는 바이러스 백신 조치이므로 경로에 직접 포인트를 추가하는 것을 막을 수는 없습니다.
계속하다이 링크, 에 점을 넣은 이유에 대한 또 다른 예를 찾을 수 있습니다 $PATH
.
각주:
rm -r /
극단적인 예로는 사용자가 쓰기 액세스 권한을 갖고 있는 시스템의 모든 파일과 디렉터리를 삭제하는 등의 쉘 스크립트를 생성하고 스크립트 이름을 지정하는 일반 사용자가 있습니다ls
. 시스템 관리자가 이 스크립트가 있는 디렉토리로 이동하여ls
해당 디렉토리의 내용을 보기 위해 표준 명령을 실행하려고 하면 쉘은 대신 동일한 이름의 스크립트를 실행하여 현재 마운트된 모든 파티션의 내용을 삭제합니다. 컴퓨터!
또한 PATH의 목적은 바이너리에 대한 전체 경로를 기억하거나 입력할 필요가 없는 방식으로 명령에 대한 경로를 완성하는 것입니다. 현재 있는 디렉터리를 색인화하는 명령이 없습니다. 이러한 프로그램이 어디에 저장되어 있는지 알고 있다면 전혀 소용이 없습니다.
편집하다:
그러나 몇 가지 연구를 통해 검색 경로의 기본 개념이 다음에서 비롯된 것임을 발견했습니다.멀티플렉스 시스템하지만 내부적으로만 검색이 가능하다는 한계가 있습니다 /bin
.유닉스 v3이 단일 디렉터리 제한 없이 이를 구현한 최초의 제품입니다. 다음 매뉴얼의 보안 페이지를 확인하십시오. .
PATH 변수를 사용할 때 문제가 나타났습니다. 이는 su
환경에 악성 코드를 주입하는 데 따른 보안 문제에 적용될 뿐만 아니라 강화됩니다.
13페이지 인용문:
Morris와 Fred Gramp는 진행 중인 게임에서 트로이 목마 팁과 대응책을 발견했습니다. 예를 들어,
login(1)
8장이 제거되고/etc/
(Grampp, v8)의 개요가 삽입되었습니다. 이러한 가젯은su
부주의한 시스템 관리자가 입력한 암호를 캡처하기 위해 프로그램 이름을 잘못 지정하거나 배치하는 오래된 문제를 해결합니다.login
su
기타 미묘한 최신 기능su
: 쉘 검색 경로에서 점이 제외되고 도둑이 선호하는 쉘 변수가IFS
재설정됩니다.
개념 이후로 점을 $PATH
.