광속으로 다는 배터리

iOS 5로 판올림한 뒤 겪은 골치 아픈 문제는 세가지다. 먼저 배터리 소모량이다. iOS 4에 비해 정말 빨리 단다. iOS 5.1에서는 배터리 문제가 개선된 것으로 나오지만 나는 비슷했다. 두번째 문제는 자주 사용하는 토털코맨더 플러그인인 'T-Pot'이 동작하지 않았다. 마지막 문제는 T-Pot이 동작하지 않아 사용한 OpenSSH가 사용하다 보면 접속이 되지 않는 문제가 있었다. 현재는 세가지 문제 모두 해결했다. 그리고 배터리가 빨리 다는 문제와 OpenSSH 문제는 모두 탈옥폰이 바이러스에 감염되었기 때문에 발생한 현상이 었다. 따라서 이 글에서는 이 바이러스 증상과 치료하는 방법을 쓰도록 하겠다.

iOS 5에서 발생한 문제들!

작년 10월 iOS 5가 나왔다. iOS 5는 눈에 띄는 획기적인 기능은 없다. 그러나 직접 찾은 iOS 5의 새로운 기능들!라는 글에서 설명한 것처럼 알림센터사용자가 원하는 기능이 상당히 많이 포함됐다. 애플에서 "200여가지 새로운 기능이 추가됐다"고 하는데 실제 확인해 보면 상당히 많은 기능이 추가된 것을 알 수 있다. 다만 조금 아쉬운 것은 처럼 설정을 바로 켜고 끌 수 있는 기능은 아직 추가되지 않았다. 그러나 iOS 5에서는 이 부분도 바로가기를 이용해서 비슷하게 구현[1]할 수 있었다.

그러나 문제가 전혀없는 것도 아니다. 블로그에 글을 올렸지만 아이클라우드 기능을 사용하면 아이튠즈를 이용한 자동 백업이 중지된다. 그러나 이런 문제 보다 더 큰 문제는 3가지였다. 먼저 배터리 소모를 들 수 있다. iOS 4까지만해도 하루는 너끈했던 배터리가 채 반나절을 지속하지 못했다. 이 문제 때문에 애플에서는 급하게 iOS 5.01을 내놓았지만 마찬가지였다. 두번째 문제는 오래 전에 트위터에 올린 것처럼 아이튠즈가 10.5로 판올림된 뒤 T-Pot이라는 토탈코맨더 플러그인이 동작하지 않았다. 모든 파일 관리를 토탈코맨더로 하는 나에게는 정말 불편한 문제[2]였다.

결국 토탈코맨더(Total Commander)로 파일을 관리하기 위해 아이폰에 OpenSSH를 설치하고 토탈코맨더에는 Secure FTP 플러그인을 설치해서 사용해 왔다. 그런데 문제가 또 생겼다. 언제 부터인지 모르겠지만 OpenSSH가 동작하지 않았다. SFTP로 접속하려고 하면 "Could not start SSH session. Failed getting banner"와 같은 메시지가 뜨며 아이폰에 접속할 수 없었다. 물론 아이폰에서 OpenSSH 어플을 다시 설치하면 짧은 시간 동안은 정상 동작한다. 그러나 또 같은 증상이 발생했다. 문제 원인을 찾기 위해 설치한 시디어 어플을 모두 확인했지만 정확한 원인을 알 수 없었다.

그러던 중 얼마 전 iOS 5.1이 나왔다. 개선사항에 배터리 문제 수정이 포함되어 있었고 iOS 5.1이 출시된 바로 다음 날 준완탈 도구redsn0w 0.9.10b6가 올라왔다. 따라서 기대감을 가지고 '5.1'로 판올림하고 바로 탈옥해서 사용했다. 그런데 5.1에서도 배터리는 비슷했다. 오후 6~7시쯤에 퇴근한다. 퇴근할 때는 집까지 한 40분 정도 걸어가며 이때는 팟캐스트를 듣는다. 집에서 밥을 먹고 자기 전까지 트위터를 확인하거나 사파리로 웹서핑을 한다. 그리고 자고 일어나면 배터리는 채 20%도 남아 있지 않을 때[3]가 많았다. 예전 iOS 4에서는 80% 정도가 남아 있던 것에 비하면 사용하지 않아도 정말 빨리 달았다.

iOS 5.1 개선사항

세 가지 문제 모두 불편했기 때문에 iOS 5로 갈아 탄 뒤 계속해서 인터넷을 검색해 봤지만 신기하게 나와 같은 문제를 겪고 있는 사람은 없는 듯했다. "Could not start SSH session. Failed getting banner"로 검색해 보면 결과는 많이 뜬다. OpenSSH 관련된 문제이기 때문이다. 그러나 여기에 아이폰과 탈옥(Jailbreak)을 추가해서 검색하면 결과가 거의 없었다. T-Pot 문제도 비슷했다. T-Pot과 오류 메시지("Missing library - Could not load iTunesMobileDevice.dll")로 검색해 보면 T-Pot 개발자 사이트외에 일부 사이트가 검색되지만 마땅한 원인을 찾을 수 없었다.

문제 원인은 바이러스!

이러다 우연히 이 세 가지 문제를 해결하는 방법을 찾아냈다. 일단 탈옥폰에서 배터리 소모가 빠른 것OpenSSH에서 오류가 뜨는 원인은 같았다. OpenSSH가 동작하지 않아 몇번씩 아이폰을 갈아 엎었다. 지난 3월 17일에도 아이폰을 갈아 엎었다. 아이폰 4Siri를 설치했다. 그런데 성능이 만족스럽지 못해서 삭제하다 아이폰이 먹통이 됐기 때문이다. 그리고 19일 OpenSSH로 접속하려고 하자 "Could not start SSH session. Failed getting banner"라는 메시지가 떴다. 조금 의외였다. 이런 메시지가 뜨는 날짜가 정해져 있는 것은 아니지만 이렇게 빨리 뜨는 것은 예상하지 못했기 때문이다.

또 갈아 엎는 것도 귀찮아서 이번에는 직접 문제를 해결하기로 작정했다. "Could not start SSH session. Failed getting banner"라는 메시지가 뜨고 OpenSSH를 다시 설치하면 일단 정상 동작한다. 바로 이 부분에서 착안했다. 어떤 오류인지 모르겠지만 OpenSSH 데몬을 죽이는 것이 있을 것으로 생각했다. 그래서 매번 다시 설치하기 보다는 OpenSSH 데몬만 필요할 때마다 기동하는 방법을 찾았다. 아이폰에서 데몬 PLIST는 다음 두 디렉토리에 설치된다.

/Library/LaunchDaemons
/System/Library/LaunchDaemons

/System/Library/LaunchDaemons서비스 최적화 하기라는 글에서 설명한 것처럼 애플의 기본 서비스 PLIST가 설치되어 있다. 물론 기본 서비스외에 다른 서비스도 설치될 수 있다. 그리고 /Library/LaunchDaemons에는 주로 시디어를 통해 설치한 서비스 PLIST 파일이 설치된다. 그런데 /System/Library/LaunchDaemons에 보지못한 서비스 PLIST가 설치되어 있는 것을 확인했다. 설치된 날짜는 3월 18일로 아이폰을 갈아 엎은 다음 날 설치된 파일이었다. 바로 com.ikey.bbot라는 파일이었다.

순간 이 파일을 보자 마자 탈옥폰은 바이러스에 걸릴 수 있다는 뉴스가 생각났다. 또 나도 글을 쓰려고 준비했던 내용이라 오래 전 본 뉴스였지만 바로 떠올랐다. 따라서 바로 ikey virus를 검색해 봤다. 생각대로 com.ikey.bbotikey 바이러스에 감염됐을 때 설치되는 파일이었다. ikey 바이러스는 A에서 D까지 총 4종의 변종이 있다. 그런데 바이러스를 치료하기 위해 파일을 삭제해 보니 의외로 내가 걸린 ikey 바이러스는 또 다른 변종이었다. 다만 바이러스치료하고 나니 두 문제가 바로 해결됐다. 바로 OpenSSH로 접속할 때 "Could not start SSH session. Failed getting banner"라는 메시지를 띄우는 문제와 배터리 문제였다.

ikey 바이러스 치료!

바이러스를 치료하고 나니 배터리 사용량이 예전 수준으로 돌아왔다. 즉, 바이러스를 잡기 전에는 사무실에서 집에까지 팟캐스트를 들으며 가면 40분만에 배터리 10%가 줄었다. 그런데 바이러스를 치료하고 난 뒤에는 남은 배터리가 100%나 99%로 소모되는 배터리는 1% 미만으로 줄었다. 따라서 '5.1'에서는 배터리 문제가 수정됐지만 탈옥하고 난 뒤 ikey 바이러스에 걸렸기 때문에 배터리가 예전처럼 광속으로 준 것이라고 생각한다. 따라서 오늘은 배터리 문제와 OpenSSH 문제를 함께 해결할 수 있는 ikey 바이러스를 치료하는 방법을 설명하겠다.

ikey 바이러스는 앞에서 설명한 것처럼 4가지 변종이 있다. 나타나는 증상은 거의 없다. 배경화면을 바꾸는 것이 전부다. 따라서 ikey 바이러스에 걸려도 심각한 피해는 발생하지 않는다. 또 소스 코드에 다음과 같은 비난이 있는 것으로 봐서 아주 악의적으로 만들어진 바이러스는 아닌 것 같다. 다만 겉으로 나타나는 증상은 배경화면의 변경이지만 의외로 이 바이러스에 걸리고 배터리 소모 문제를 호소하는 사람이 많았다. 이 증상은 나도 비슷했다. 위에서 설명했지만 ikey 바이러스를 제거하자 광속으로 달던 배터리 소모량이 정상으로 돌아 왔다.

Why?: Boredom, because i found it so stupid the fact that on my initial scan of my 3G optus range i found 27 hosts running SSH daemons, i could access 26 of them with root:alpine. Doesn't anyone RTFM anymore? [출처: First iPhone worm discovered - ikee changes wallpaper to Rick Astley photo]
왜?: 심심해서, 3G 옵튜스로 검색했을 때 SSH 데몬을 실행한 27개의 호스트를 찾고 너무 멍청하다는 사실을 발견했다. 따라서 이 중 26개를 root:alpine로 접속할 수 있었다. 안내서를 읽는 사람이 더 이상 없지않은가?
RTFM: Read The Fucking Manual

탈옥폰에서 윈터보드를 사용하면 바뀐 배경화면을 볼 수 없다. 그러나 윈터보드를 사용해도 전화를 받을 때는 원래 지정한 배경화면이 나타난다. 따라서 ikey 바이러스에 걸리면 다음 그림처럼 전화를 받을 때 1980년대 팝 가수 릭 애슬리(Rick Astley)의 사진이 나타난다고 한다. 그러나 내가 걸린 ikey 바이러스는 이런 증상도 없었다. 또 바이러스를 치료하기 위해 파일을 삭제하며 확인해 보니 A~D의 어떤 유형에도 해당되지 않았다. 모르긴 해도 바이러스에 걸린 것을 감추기 위해 배경화면이 바뀌는 부분을 제거한 변종이 아닌가 싶다.

바이러스에 걸린 뒤 증상

아무튼 이 바이러스를 치료하는 방법은 간단하다. 기본적으로 바이러스가 만든 파일을 삭제한 뒤 아이폰을 재부팅하면 치료가 된다. 다만 D형은 시디어(Cydia) 파일까자 감염시키기 때문에 파일을 삭제한 뒤 시디어를 재설치해야 한다. 일단 바이러스 제거를 위해서는 OpenSSH에 접속할 수 있는 터미널 프로그램(Putty)이 PC에 설치되어 있거나 아이폰(iPhone)에 MobileTerminal 어플이 설치되어 있어야 한다. 여기서는 시디어 어플인 MobileTerminal이 설치되어 있는 것을 가정하고 설명하겠다.

또 파일 삭제는 굳이 터미널에서 작업하지 않아도 된다. iFunBox, iSprit, T-Pot 플러그인처럼 아이폰 파일 시스템에 접근할 수 있는 프로그램으로 삭제해도 된다. PuttyMobileTerminal과 같은 콘솔 프로그램은 관리자(root) 암호를 바꾸고 시디어 어플을 다시 설치하기 위해 필요한 것이다. 다만 이들 프로그램에 대한 사용 방법은 따로 설명하지 않겠다. 탈옥폰을 사용하고 있다면 이 정도의 어플은 이미 능수능란하게 사용할 것으로 생각하기 때문이다. 마지막으로 OpenSSH 접속시 오류 메시지가 뜬다면 시디어에서 다시 설치한 것을 전제로 하겠다.

  1. 관리자로 로그인
    아이폰에서 모바일 터미널을 실행한 뒤 관리자로 로그인 하기 위해 명령행에서 su 명령을 실행한다. 이어지는 프롬프트에서 root 암호인 'alpine'를 입력하면 관리자로 로그인 된다.

    su
    alpine
    
  2. A~D형 변종파일 삭제
    꼭 삭제해야 하는 파일은 poc-bbot, sshpass, com.ikey.bbot.plist, bbot.lock이다. 나머지 두개의 .JPG 파일은 굳이 삭제하지 않아도 된다. 또 일부 변종에서는 아예 .JPG 파일이 없는 때도 있다.

    rm /bin/poc-bbot
    rm /bin/sshpass
    rm /System/Library/LaunchDaemons/com.ikey.bbot.plist
    rm /var/lock/bbot.lock
    rm /var/log/youcanbeclosertogod.jpg
    rm /var/mobile/LockBackground.jpg
    
  3. D형 변종 확인
    명령행에서 다음 명령을 실행한 뒤 파일이 있다면 D형 변종이다. D형 변종이라면 4단계를 진행하고 A~C라면 5단계를 진행한다.

    ls -al /usr/libexec/cydia/startup-helper
    
  4. D형 변종 파일 삭제
    명령행에서 다음 명령을 차례로 실행한다. 삭제하는 파일 중 com.saurik.Cydia.Startup.plist과 startup 파일은 시디어를 설치하면 정상적으로 설치되는 파일이다. 그런데 이 파일까지 감염되었기 때문에 일단 바이러스 파일을 삭제하고 apt-get 명령을 이용해서 시디어를 삭제/재설치[4]해야 한다.

    rm /usr/libexec/cydia/startup-helper
    rm /usr/libexec/cydia/startup.so
    apt-get remove cydia
    apt-get install cydia
    
  5. 루트 암호 변경
    OpenSSH를 설치하지 않았다면 암호를 바꾸지 않아도 감염되지는 않는다. 그러나 보안상 바꾸는 것이 좋다. 또 ikey 바이러스는 앞에서 설명한 것처럼 'alpine'라는 암호를 바꾸지 않은 때만 감염된다. 따라서 OpenSSH를 사용한다면 보안상 root 암호를 바꾸는 것이 좋다. 뻔히 알면서도 바꾸지 않아 바이러스에 감염된 것은 본문에도 있듯이 T-Pot이 정상적으로 동작할 때는 OpenSSH를 사용할 필요가 없었기 때문이다. 아무튼 암호를 바꾸기 위해 명령행에서 passwd를 실행하고 새로운 암호(New password, Retype new password)를 입력한다.

  6. 아이폰 재부팅
    바이러스 파일을 삭제하고 아이폰을 다시 부팅하면 ikey 바이러스를 제거할 수 있다. 만약 제거한 뒤에도 OpenSSH가 동작하지 않는다면 시디어에서 OpenSSH를 다시 설치하면 된다.

남은 이야기, T-Pot

앞에서 설명했지만 iOS 5로 판올림한 뒤 골치를 썩었던 문제는 3가지였다. 이 중 두 가지(배터리 문제, OpenSSH 문제)는 본문에서 설명한 것처럼 ikey 바이러스를 삭제하면 해결된다. 토탈코맨더에서 T-Pot으로 접속할 때 "Missing library - Could not load iTunesMobileDevice.dll"라는 오류 메시지가 뜨는 부분은 의외의 방법으로 해결됐다. 이 문제를 해결하기 위해 인터넷을 검색하고, 파일을 패치하고 레지스트리를 바꾸어 봤다. 또 이외에 상당히 여러가지 방법을 시도해 봤다. 그러나 모두 실패했다.

다만 나와 같은 문제를 겪고 있는 사람이 있다면 iOS 5가 출시된 작년 10월이라면 몰라도 무려 반년이 지난 지금이라면 비슷한 고충을 호소하는 사람이 있을 것으로 생각했다. 그런데 의외로 이런 사람이 없었다. 따라서 이 문제가 TC 8.0 베타의 문제가 아닐까 하는 생각이 들었다. 일단 토탈코맨더의 공식 최신판인 7.57을 별도의 폴더에 설치하고 T-Pot으로 접속해 봤다. 그런데 7.57로 접속하자 아무 문제없이 T-Pot으로 아이폰에 접속할 수 있었다[5]. 7.57로 접속이 가능한 것을 보고 이번에는 8.0 베타를 별도의 폴더에 다시 설치한 뒤 같은 방법으로 시도해 봤다.

역시 접속이 가능했다. 결국 8.0 베타에서 접속이 되지 않는 문제는 기존에 설치된 확장(WXC, WLX와 같은 플러그인이 아니라 DLL 형태의 확장)과의 충돌이라는 생각이 들었다. 따라서 이런 확장을 모두 제거하고 토탈코맨더를 실행하자 생각대로 8.0 기존판에서도 T-Pot을 통해 접근할 수 있었다. 따라서 위와 같은 문제가 발생한다면 토탈코맨더의 확장 중 T-Pot과 충돌이 있는 확장을 찾아 보기 바란다. 어떤 확장이 원인인지는 아직 찾지 못했다.

관련 글타래


  1. iOS 5.1에서는 이 바로가기가 막혔다. 모르긴 해도 5.2 정도에서는 설정을 바로 켜고 끌 수 있는 기능이 추가될 것으로 예상해 본다. 
  2. 널리 알려진 iFunBox, 토탈코맨더(Total Commander)처럼 두 패널로 관리할 수 있는 iSprit등 아이폰 파일 시스템에 접근할 수 있는 프로그램은 많다. 몰라서 토탈코맨더를 쓰는 것이 아니다. 나서기를 위해 추가한다. 
  3. 트위터 알림이 많기 때문에 12시 부터 새벽 6시까지는 트위터 알림을 끄고 사용한다. 
  4. 나는 다시 설치할 필요가 없었지만 확인을 위해 삭제 뒤 다시 설치해 봤다. 그런데 다시 설치하니 시디어가 실행되지 않았다. 이점 주의하기 바란다. 
  5. 참고로 토탈코맨더의 설정 파일인 wincmd.ini는 같은 파일을 사용했다.