서비스 목록을 보다가 한 번 더 읽었다. ToucnEn_nxFirewall. TouchEn 이 아니라 ToucnEn 이다. 오타처럼 보여서 화면을 확대해 봤는데, 서비스 이름과 표시 이름 모두 그 철자 그대로였다. 실행 파일 속성의 제품 이름은 제대로 "TouchEn nxFirewall" 인데, 서비스를 등록하는 쪽에서만 글자 하나가 틀린 채 굳어 버린 것이다.

지난 편에서 CrossEX 의 레지스트리에 TouchEn 모듈 네 개가 적혀 있는 것을 봤다. 그중 9편의 nxKey 와 KeySharp biz 를 빼면 남는 두 개가 이번 편의 nxWeb 과 nxFirewall 이다.

두 프로그램의 이름표

설치 정보와 서비스, 실행 파일 속성을 모았다. 실행 파일과 DLL 은 모두 RaonSecure Co., Ltd. 서명이 유효했다.

항목 TouchEn nxWeb TouchEn nxFirewall
버전 1.0.1.31 1.0.1.6
설치 폴더 C:\Program Files\RaonSecure\NxWeb C:\Program Files (x86)\TouchEn\Firewall
서비스 TENXW_Guard (자동, LocalSystem) ToucnEn_nxFirewall (자동, LocalSystem)
서비스 실행 파일 TENXW_SVR.exe TEFSvrP64.exe (457KB)
떠 있는 프로세스 TENXW_SVR, TEWeb, TEWeb64, TEWebP TEFSvrP64
제거 명령 TEWeb.exe uninstall TEFSvrP64.exe uninstall

nxWeb 쪽이 조금 복잡하다. 서비스 TENXW_Guard 가 TENXW_SVR.exe 를 실행하고, 이것이 다시 TEWeb.exe, TEWeb64.exe, TEWebP.exe 세 개를 자식으로 띄운다. 32비트와 64비트용이 따로 있고, TEWebP.exe 의 파일 설명은 "TouchEn nxWeb Policy" 다. 네 프로세스 모두 작업 집합 918MB, 개인 메모리 25MB 로 크지 않다. 두 서비스 모두 복구 설정에 재시작 동작은 없었다.

nxWeb: 거의 모든 창에 들어가 있는 DLL

라온시큐어의 제품 소개서는 TouchEn nxWeb 을 웹 콘텐츠 유출 방지 솔루션으로 설명한다. 보호가 걸린 웹 페이지에서 화면 캡처, 인쇄, 소스 보기를 막는다는 것이다. 6편의 마크애니 Image SAFER 와 비슷한 일을 하는 제품이다.

이게 실제로 어떻게 구현되어 있는지 단서가 하나 나왔다. 설치 폴더에 TENXWGuard32_348.dll 과 TENXWGuard64_348.dll 이 있길래, 실행 중인 프로세스들이 불러온 모듈 목록에서 이 이름을 찾아보았다.

Get-Process | ForEach-Object {
    try { if ($_.Modules.ModuleName -contains 'TENXWGuard64_348.dll') { $_.ProcessName } } catch {}
} | Sort-Object -Unique

내 권한으로 모듈 목록을 읽을 수 있는 프로세스 가운데 127개에 TENXWGuard64_348.dll 이 올라와 있었다. 브라우저는 물론이고 탐색기, 캡처 도구(SnippingTool), 메신저, 명령 프롬프트, 원격 데스크톱 클라이언트, 개발 도구까지 창을 가진 프로그램이라면 거의 다였다. 은행 페이지를 열어 둔 상태가 아니었는데도 그랬다. 창을 가진 프로세스 전체에 DLL 을 심는 전역 후킹 방식으로 보이고, 그래야 다른 프로그램이 화면을 찍으려는 순간을 가로챌 수 있을 것이다.

화면 보호 기능 자체는 이해가 간다. 다만 PC 전체의 거의 모든 프로세스 안에 제3자 DLL 이 늘 들어가 있다는 것은, 그만큼 다른 프로그램과 부딪힐 여지가 생긴다는 뜻이기도 하다. 캡처나 화면 공유, 원격 지원이 이유 없이 이상하게 동작한다면 6편의 Image SAFER 와 함께 의심해 볼 후보다.

nxFirewall: 방화벽과 573MB 백신 엔진

TouchEn nxFirewall 은 이름 그대로 개인 방화벽이다. 은행 사이트를 쓰는 동안 PC 의 네트워크를 지켜보는 역할로 알려져 있다. 서비스 본체 TEFSvrP64.exe 만 늘 떠 있었고, 4.7MB 짜리 TEFW.exe 는 실행 중이 아니었다. 필요할 때 뜨는 화면 쪽 프로그램으로 보인다. 폴더의 JRFW.log 는 10월 30일에 갱신되어 있었다. 최근까지 동작한 흔적이다.

참고로 드라이버 목록에서 TK 로 시작하는 방화벽 드라이버(TKFWVT, TKFWFV)를 보면 TouchEn Key 의 것처럼 보이지만, 실제로는 10편의 nProtect Tachyon 드라이버다. 이 PC 에서는 TouchEn 이나 RaonSecure 경로를 가리키는 커널 드라이버는 찾지 못했다.

뜻밖이었던 것은 바로 옆 C:\Program Files (x86)\TouchEn\AntiVirus 폴더였다. 파일 994개, 573MB. Firewall 폴더(11MB)의 50배가 넘는다. 들어 있는 DLL 은 Bitdefender 의 검사 엔진(scan.dll, bdcore.dll)과 SGA 의 VIRUSCHASER 업데이트 모듈이었고, Plugins 폴더의 엔진 파일은 7월 13일에 마지막으로 갱신되어 있었다. 이 폴더는 설치된 앱 목록에 따로 나오지 않는다. 같은 TouchEn 폴더 아래 있고 nxFirewall 말고는 이 경로를 쓸 TouchEn 제품이 보이지 않아서, nxFirewall 의 악성코드 검사 기능이 쓰는 엔진으로 보인다. 다만 제품 문서에서 둘의 관계를 확인하지는 못했다.

서비스 이름의 오타는 동작에는 아무 영향이 없다. Windows 는 서비스 이름의 철자를 따지지 않는다. 대신 서비스 목록에서 "TouchEn" 으로 검색하면 이 서비스가 걸리지 않는다는 작은 함정이 생긴다. 스크립트로 정리할 때는 Touc 정도로 짧게 찾는 편이 안전하다.

지우는 순서

두 프로그램 모두 은행이나 공공 사이트가 요구해서 들어온 것이고, 그 사이트를 PC 로 쓰지 않는다면 지워도 PC 동작에는 문제가 없다. 특히 nxWeb 은 위에서 본 것처럼 거의 모든 프로세스에 들어가 있으니, 캡처나 화면 공유 문제를 겪고 있다면 먼저 정리해 볼 만하다.

설정 → 앱 → 설치된 앱에서 "TouchEn nxWeb" 과 "TouchEn nxFirewall" 을 각각 제거한다. 레지스트리에 등록된 제거 명령은 각 실행 파일에 uninstall 인수를 붙인 형태다. nxWeb 의 DLL 은 이미 다른 프로세스 안에 올라와 있어서 제거 직후에는 파일이 잠겨 다 지워지지 않을 수 있으니, 제거 뒤에는 재부팅한다.

재부팅한 다음 확인할 것은 세 가지다. 서비스 목록에 TENXW_Guard 와 ToucnEn_nxFirewall 이 없는지, C:\Program Files (x86)\TouchEn\AntiVirus 폴더가 남아 있지 않은지, 그리고 14편에서 본 CrossEX 의 touchenex 목록이다. CrossEX 를 남겨 둔다면 그 목록에 지운 모듈의 경로가 그대로 남아 있을 수 있는데, 다음에 사이트에 들어가면 설치 안내가 다시 뜨면서 정리될 것으로 보인다.

다음 편은 이 PC 에는 없지만 2023년 보안 당국 발표로 이름이 널리 알려진 이니텍의 INISAFE CrossWeb EX 다.