짜증나는 것 중 하나가 키보드 보안이다. 유저랜드 프로그램 주제에 커널을 지 멋대로 들어가서 휘젓고 다니면서, 때때로 한글 세벌식이나 영문 드보락을 처리하지 못하는 밥솥같은 놈이다. (키보드 보안 짜시는 분에게는 죄송합니다만, 저는 지극히 개인적으로 이걸 싫어합니다) 오늘 KLDP를 보다 보니까 “리눅스용 키보드 보안”이라는 글이 있길래, 뭔가 해서 한 번 분석해 보았다.
무엇인지 궁금하면 여기에서 다운로드해 보기 바란다. zip(!) 파일의 압축을 풀어 보면 사용설명서와 rpm 파일이 나온다. bin 파일로 된 인스톨러가 있긴 있지만, 내 컴퓨터는 amd64 환경이기 때문에 보나마나 i386인 바이너리 인스톨러가 제 정신을 못 찾을 것 같아서(/usr/lib32, /lib32 문제) rpm 파일의 압축을 풀어 보았다. fakeroot alien -t를 사용하면 된다.
rpm 파일을 풀어서 나오는 것은, 한소프트 리눅스 커널 2.6.14-56(그 vmsplice 문제에는 다행히도 해당하지 않는다)과 2.6.14-56-smp 커널의 i386에 맞게 컴파일된 커널 모듈과, 그 커널 모듈과 통신하는 것 같은 모질라 플러그인, PyGTK 기반으로 되어 있는 GUI 프로그램이다. 그 외에도 리눅스용 백신이 있었다.
사용자 안내서의 내용으로 미루어 보아 리눅스용 백신은 V3 엔진의 리눅스 포팅으로 보인다. 그러나 가장 걱정하고 싶은 것은 키보드 보안 모듈이었다. 많은 리눅스 사용자가 싫어할 것 같은 강제 설치는 일단 넘어가자. 모질라 플러그인이 설치되어 있는가를 검사해서 강제로 깔게 하는 것 같았다. 그리고 리눅스용 키로거 두 종류를 사용해서 실험하는 것을 보여주고 있다. 뭐, 거기까지는 괜찮다.
문서에서 다루고 있는 키로거는 lkl과 xkey이다. 이 두 키로거들을 테스트해 보자. 테스트 환경은 amd64 커널, KDE 4.0.4에서 한글 입력기 나비가 설치되어 있는 상황이다. 일단 lkl을 받아서 컴파일하는 데까지는 성공했으나, 일반 사용자 권한으로 실행시키려고 하니까 이런 에러가 났다.
psj@saebyuk:~/download/lkl$ ./lkl
Have to be root to perform a iopl()!
그렇다. 압축 파일 안에 있는 사용자 설명서에는 lkl이 제대로 돌아가는 것 같아 보이지만, 자세히 보면 사용자가 루트이다. 일반 사용자 권한으로는 절대로, 절대로 저렇게 뚫리지 않으니까 안심해도 된다.
xkey는 따로 프로젝트로 제작되는 것이 아니고 소스 코드는 어딘가에서 떠돌고 있다. xkey는 X11의 키보드 이벤트를 가로채는 것이라서 불행히도 뚫린다. 그러나 절대로 리눅스 배포판의 패키지로 따라오지는 않는다. X11 키보드 이벤트마저도 암호화해 준다는 것은 대단한 일이라고 생각한다.
내 생각으로는, 리눅스에서 키보드 보안을 위해서 뻘짓을 할 필요는 없다. 리눅스의 루트 권한은 상당히 얻기 힘들다. 커널의 vmsplice 패치도 발견된 지 채 일주일도 지나지 않아서 커널 메인 트리에 패치가 된 것을 보면, 이는 분명히 독점 소프트웨어와는 다르다는 것을 알 수 있다. 루트 권한을 따지 않으면 대부분의 키로거가 듣지도 않을 뿐더러, 사용자 권한으로 작동하는 키로거 역시 윈도처럼 막 작동하는 것도 아니다. 도리어 바이너리 커널 모듈 형식으로 배포하면, 저 안티키로거의 버그를 사용해서 그것마저도 무력화할 수도 있다. 소스가 공개된다면 굳이 저것 없이도 리눅스 커널 자체에서 키 입력을 암호화할 수 있는 처리를 할 것이라고 생각한다.
그러니까 제발 이딴 거 좀 강제로 깔게 하지 말자. 64비트 윈도는 희귀하지만 64비트 리눅스는 생각보다 많은 사람들이 쓰고 있다. 그리고 리눅스는 윈도와는 구조 자체가 달라서, 굳이 이렇게까지 할 필요는 없다. 다시 한 번 말하지만, 프로그램 자체는 좋다. 다만 강제로 깔게 하면 문제가 생길 것이다.
마지막으로 센스. 인스톨러는 좋은데 평가판이라니 ㅋㅋㅋ