2010-12-24 6 views
1

셸 스크립트와 임시 파일 처리에 대해 읽는 동안 Symlink Exploits를 발견했습니다. http://www.linuxsecurity.com/content/view/115462/151/이 기본 아이디어입니다. 파이썬 open()이 심볼릭 링크인지 확인하기 위해 열려고하는 파일을 검사하고 'w'모드에서 심볼릭 링크 파일을 열려고했는지 궁금했습니다. 놀랍게도 그것은 링크를 열었고 결과적으로 링크가 가리키는 파일을 덮어 씁니다. 이제 파이썬 프로그램이 많은 파일 처리를하고 있으며 예측 가능한 방식으로도 공격자가 내 프로그램이 작성해야하는 파일의 이름으로 링크를 작성하여 중요한 시스템 파일에 링크하는 것은 불가능합니다. 이렇게하면 시스템 파일을 덮어 쓰고 시스템이 손상됩니까? 파이썬 2.4를 사용했습니다. 후속 Python 버전이이 문제를 해결합니까?Symlink Exploits in Python

아니면 전혀 문제가 있습니까?

답변

1

예측 가능한 이름을 가진 다른 사용자이 쓸 수있는 디렉토리에있는 임시 파일 (일반적으로 파일에 쓰기)을 만드는 경우에만 문제가 발생합니다. 그래서 스크립트가 홈 디렉토리에만 쓰면 괜찮습니다. 공유 쓰기 디렉토리에 임시 파일을 만들어야하는 경우./tmp와 같은 것을 사용해야합니다. http://docs.python.org/library/tempfile.html

+0

루트로 실행해야하는 스크립트가 있습니다. 기본 디렉토리가 있습니다. 그리고 base_directory/tmp와 base_directory/output에 기록합니다. 그래서 그것을 보호하기 위해 기본 디렉토리에 대한 재귀 적 755 권한을 'root'에 부여해야합니까? 그 수치는 충분할 것입니까 – RedBaron

+0

왜 700입니까? 그러나 네, 다른 사용자가 파일을 생성하는 디렉토리에 심볼릭 링크를 넣을 수없는 한이 특별한 문제는 적용되지 않습니다. –

+0

ur 도움에 감사드립니다. – RedBaron

2

프로그램이 상승 된 권한 (예 : 루트)으로 실행중인 경우 낮은 권한 사용자가 심볼릭 링크를 만들 수있는 디렉토리에있는 파일에 쓰지 않으므로 이러한 유형의 공격을 막을 수 있습니다.

이 문제는 언어 또는 런타임 라이브러리에서 해결할 수 없지만 프로그램이 실행되는 환경에서 해결해야합니다.

(프로그램이 높은 권한으로 실행되지경우, 다음 심볼릭 링크를 만들어 사용자들이 당신의 프로그램없이 스스로 할 수 없었다 아무것도를하지 않습니다.)

1

먼저 스크립트를 실행하는 사용자에게 중요한 시스템 파일을 쓸 수있는 권한이 없어야합니다. 둘째,이 문제를 해결하는 것은 비단뱀 작업이 아닙니다. 그것은 스크립트 개발자의 임무입니다. 파이썬은 적어도 2.3 이후로 tempfile을 제공합니다.