“C : \ Program”이라는 프로그램이 다른 프로그램에 영향을 줄 수있는 이유는 무엇입니까?


16

오늘은 파란색이라는 파일이 Programroot의에 나타 났 C:\으며 시스템에 로그인하면 팝업에 다음과 같은 메시지가 표시됩니다.

파일 이름 경고

컴퓨터에 "C : \ Program"이라는 파일 또는 폴더가있어 특정 응용 프로그램이 제대로 작동하지 않을 수 있습니다. "C : \ Program1"로 이름을 바꾸면 문제가 해결됩니다. 지금 이름을 바꾸시겠습니까?

메시지는 자명하지만이 파일이 왜 그렇게 큰 영향을 미칠 수 있을지 궁금합니다. 실제로, 일부 프로그램 (아마도, 내가 확인하지 않은) C:\Program Files...은 전혀 시작되지 않았습니다. 폴더에 쓰려고 C:\Program Files\Something...하지만 따옴표없이 파일을 만드는 방법은 이해할 수 있지만 다른 프로그램에 어떤 영향을 줄 수 있는지는 거의 이해하지 못합니다.


1
이 메시지가 Windows에서 생성 된 것입니까?
Ramhound

1
프로세스 익스플로러에서 두 번 확인한 것은 explorer.exe의 대화 상자였습니다.
Konrad Kokosa

2
스케치가 들리지만 Program Files* 일반적인 소비자 를 위한 프로그램 이외의 다른 프로그램은 선택되어 있지 않아야합니다 . 그러나 검색에 대한 잘못된 일치가 대신 대신 찾을 수 있기 때문이라고 생각합니다 Program Files.
nerdwaller

답변:


27

Win32 API의 오랜 취약점으로 인해 큰 영향을 미칩니다.

Win32에서 CreateProcess()시스템 호출을 통해 프로그램이 생성됩니다 . 여러 가지 방법으로 사용할 수 있습니다. 유닉스, 리눅스 또는 OS / 2 배경에서 온 사람들은 일반적으로 프로그램 (이미지 파일)이 생성되고 명령 꼬리가 새로운 프로세스로 전달되는 두 가지 별도의 인수를 취하는 것으로 생각합니다. 파일 이름과 인수 벡터 / 명령 꼬리 해당 운영 체제의 API에는 두 가지가 있습니다. 그러나 실제로 시스템 호출은 프로그램 이름과 인수가 하나의 큰 문자열로 묶인 대체 형식으로 호출 될 수 있습니다. CreateProcess()프로그램 파일 이름을 명령 꼬리와 분리하려고 시도합니다.

문제는 왼쪽 부분이 파일이나 디렉토리와 일치 할 때까지 연속되는 각 공백 문자에서 문자열을 twain으로 점진적으로 분할 하여이 작업을 수행한다는 것입니다. 많은 Win32 프로그램은 C:\Program Files\Contoso\TakeOver.exe StackExchange.com시스템 호출 과 같은 문자열을 전달하려고 시도합니다 . 이렇게하면 명백히 위험한 사람이 와서 파일을 생성 할 때까지 올바른 프로그램 ( C:\Program Files\Contoso\TakeOver.exe오른쪽 명령 꼬리 포함) 이 실행됩니다 .StackExchange.comC:\Program

이 시점에서 시스템 호출은 C:\Programtail 명령으로 프로그램 이미지 파일을 실행하려고 시도합니다 Files\Contoso\TakeOver.exe StackExchange.com. C:\Program실제로 실행 가능한 프로그램 이미지 인 경우 Heaven이 도움을줍니다 .

이것은 일반적인 약점이며, 하나의 큰 문자열을 사용하여 다른 프로그램을 생성하는 프로그램과 함께 공백을 포함하는 모든 프로그램 파일 이름에 적용됩니다. 그러나 가장C:\Program Files\ 큰 영향을 받는 것은 하나의 큰 문자열 접근 방식을 사용하는 많은 Win32 프로그램과 그 아래에 존재하는 모든 프로그램입니다 .

Win32 API를 변경하기에는 너무 늦었습니다. 10 년 전에 너무 늦었습니다. 그리고 Microsoft는 두 개의 문자열 대신 하나의 큰 문자열을 전달 하는 다른 사람작성한 모든 프로그램을 변경할 수 없습니다 CreateProcess(). 따라서 Microsoft는 사용자가 로그온 할 때 C:\Program표시되는 경고가 있는지 Windows에서 확인 합니다.

보시다시피, Microsoft의 Win32 doco 에는 몇 년 전부터 존재했던 One Big String 방식을 사용하여 프로그램을 작성하지 말라고 개발자에게 알려주는 "보안"경고가 있습니다.

추가 자료


6
훌륭한 답변! 개발자로서 다음으로 할 일은 분명히 C:\Program.exe모든 명령 줄 매개 변수를 기록 하는 더미 를 만드는 것 입니다. 우리는 누가 그것을 사용하는지 볼 것입니다!
Konrad Kokosa

1
그래서 XP 이후 기본 보안 설정이 아닌 관리자에 의해 루트에 파일을 만들 허용하지 않는 이유입니다.
kinokijuf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.