GN⁺: 충분히 발달한 Uninstaller는 Malware와 구별할 수 없다
(devblogs.microsoft.com)- 탐색기의 크래쉬가 급증해서 이유를 찾다보니 스택에서 악성코드와 비슷한 함수 포인터를 발견
- 뒤져보니 악성코드가 아니라 언인스톨러였음
- 언인스톨러가 종료하고 나면 자기 자신인 바이너리를 지우려고 기다리는 것(Self Deleting)
- 이 코드는 CodeProject에 10년전에 소개된 방법을 사용한 것
- 아마도 어떤 DLL의 함수를 호출해야 하는 것인데 그게 우회(Detour)되어서 일어난 것
- 자신을 삭제하려면 이렇게 다른 프로세스(탐색기)에 코드 삽입이나 우회하지 말고 다음 처럼 cleanup.js 같은 임시 파일을 이용할 것
- 이 코드는 자신을 지우고, uninstaller도 20초동안 삭제 시도함
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile("C:\\Users\\Name\\AppData\\Local\\Temp\\cleanup.js");
var path = "C:\\Program Files\\Contoso\\contoso_update.exe";
for (var count = 0; fso.FileExists(path) && count < 40; count++) {
try { fso.DeleteFile(path); break; } catch (e) { }
WSH.Sleep(500);
}
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 긱뉴스 보면서 제게 최고의 웃음을 선사한 글이네요.
언인스톨러 역사는 Windows 역사와 비슷하다고 보면 됩니다.
안타깝게도 언인스톨러 역사를 찾기는 매우 어렵지만, 그나마 위키백과에 있습니다.
1992년 올드비에게 백신 하면 생각나는 노턴, 그 언인스톨러가 최초였고, 그리고 이 언인스톨러를 상용화한 건 1998년입니다.
그리고, 저사단이 난 지금도 98년식 언인스톨러 실행 흐름에 여전히 묶여 있죠.
맥과 리눅스 사용자에게 윈도우 쓰면서 언인스톨러를 보면 정말 "드럽고 불쌍한 OS 같으니라고" 라는 야인시대 김두한 사운드가 절로 나올 겁니다.
게다가 당연하지만 완벽하지도 않아서, 찌꺼기는 무조건 남기 마련이었고, 이 찌꺼기를 제거해주는 언인스톨러 클리너나 윈도우 계열 클리너 제품도 성황리에 판매하였고, 부담스러운 가정을 위해 프리웨어로도 제공하고 있습니다.
그리고 지금, 윈도우 11 시대에서도 30년된 언인스톨러 방식이 쓰이고 있죠...
사실 뭐... 설치 방식부터가 맥이나 리눅스에 비하면 중구난방이니, 언인스톨러도 기초는 비슷하지만 제각각이고, 그렇다 보니 깨끗이 삭제한다는 건 거의 불가능에 가깝죠.
그렇다 보니 윈도우는 그냥 뭐 안된다 싶으면 백업 후 밀어버리고 다시 까는 것만큼 깔끔한 방법이 없습니다. 현재진행형이죠. 단지 빈도가 줄었을 뿐이죠.
그때 그 시절, 찌꺼기 제거 프로그램을 썼던 기억이 나네요...
그래도 요즘엔 윈도우도 패키지 관리 프로그램이 조금씩 발전하고 있으니 기대하고 있습니다. +_+
글의 제목은 유명한 SF 소설가 아서 C. 클라크 경의 말에서 온 것입니다.
"Any sufficiently advanced technology is indistinguishable from magic."
"충분히 발달한 과학 기술은 마법과 구별할 수 없다."
Hacker News 의견
- 고급 언인스톨러와 맬웨어 간의 유사성에 대한 논의, 자가 삭제 실행 파일에 초점을 맞춤
- 자가 삭제 실행 파일의 코드를 포함한 코드 프로젝트에 대한 링크 제공
- 저자는 바이너리가 자체 삭제, 슬립, 언인스톨러와 상호 작용하기 때문에 맬웨어처럼 보인다고 제안
- 제안된 해결책에 대한 논쟁, 원래 것보다 나은지, 나쁜 휴리스틱을 사용하여 악의성을 판단하는지 의문 제기
- 일부 댓글에서는 왜 Windows 프로그램이 특별한 인스톨러/언인스톨러가 필요한지, 이것이 왜 Windows 자체에서 처리되지 않는지에 대해 의문을 제기
- wscripts의 사용에 대한 언급, 코드 서명 또는 실행 전에 검증할 수 없는 능력 때문에 맬웨어로 프로파일링 될 수 있음
- '디투어'라는 개념 제기, Linux의 LD_PRELOAD 명령어와 비교
- 안티바이러스 소프트웨어에게 눈치채지 못한, 모든 디렉토리를 언인스톨러 목록에 추가한 Windows 95/98용 간단한 앱에 대한 회상
- 일부 댓글러들은 앱이 쉽게 설치 또는 제거할 수 있는 독립적인 폴더인 AmigaOS 접근법을 선호한다고 표현
- 기사는 Windows가 자바스크립트를 쉘 스크립트로 실행하는 것을 지원한다는 놀라운 사실로 끝남