“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.