諸行無常

by

한빛전자 CAPL-6000용 OpenWrt

SW 이야기

이 글의 내용은 GitHub 저장소 README.md 파일의 내용을 복사한 것입니다.

한빛전자 LG U+향 CAPL-6000용 OpenWrt v19.07.2

  • 저도 잘 모르고 만들었기 때문에 무언가 문제가 있을 것 같습니다.
  • MR 환영합니다.

작동이 되지 않는 기능

  • WiFi
  • 그 외 발견하지 못한 기능이 더 있을 수 있음

되긴 되는데 뭔가 마음에 안 드는 기능

  • ip link up이 느림. 부팅 개시 후 60초 이상 걸리는 것 같음.

빌드 방법

  • 표준적인 OpenWrt의 빌드 방법을 따르면 됩니다. 제품 이름은 Hanbit Electronics CAPL-6000으로 ar71xx에 등록되어 있습니다.

설치 방법

  • 안정된 버전이 아니며 순정 펌웨어로의 부팅이 되지 않을 수 있습니다. 배포자는 이에 대해 유무형을 막론하고 어떠한 책임도 지지 않으므로 본인 부담으로 진행하시기 바랍니다.
  1. 관리 페이지에 로그인합니다.

  2. 시스템 설정으로 이동한 뒤 F12를 눌러 개발자 도구를 열고 <body> 태그 바로 하위에 있는 <form>태그를 눌러 다음과 같이 변경합니다.

     <script>
       function FirmStat(pForm) {
         var firmware_name;
         var index_1, index_2;
    
         var upgradeMsg = "ㄹㅇ?";
    
         firmware_name = pForm.file.value;
    
         if (((index_2 = firmware_name.lastIndexOf(".")) != -1) &&
           (index_2 > parseInt(index_1 + 1)) &&
           (firmware_name.substring(index_2) == ".bin")) {
    
           // 경고 문구 입력  
           yesorno = confirm(upgradeMsg);
    
           if (yesorno == true) {
             document.body.style.cursor = 'wait';
             document.forms[0].submit();
           }
         } else {
           alert("upload 파일이 아닙니다. 파일을 다시 선택해 주세요");
           return;
         }
       }
     </script>
     <form action="upgrade.cgi" method="POST" ENCTYPE="multipart/form-data">
       <div align=center>
         <table border="0" cellpadding="0" cellspacing="1" width="620" bgcolor="#CCCCCC">
           <tr>
             <td width="620" bgcolor="white">
               <table border="0" cellpadding="2" cellspacing="1" width="620">
                 <tr>
                   <td class=contents width=165 bgcolor=f0f0f0 align=center>소프트웨어 업그레이드</td>
                   <td bgcolor=f8f8f8><input type="file" name="file" style="background-color:white; value=" image.bin"
                       size=30>
                     <input class=btn type="button" name="upgradebtn" value="업그레이드 시작" style="width:100"
                       Onclick="FirmStat(this.form);">
                   </td>
                 </tr>
               </table>
             </td>
           </tr>
         </table>
       </div>
     </form>
  3. openwrt-ar71xx-generic-capl_6000-initramfs-kernel.bin를 선택하여 펌웨어 업데이트를 진행합니다. 업데이트가 완료되면 인터넷 연결이 끊기게 되며 약 2~3분 뒤에 다시 인터넷 연결이 가능해집니다.

  4. 인터넷에 연결되면 PuTTY등 ssh 클라이언트를 사용하여 192.168.1.1로 접속합니다. 계정은 root에 패스워드는 없습니다.

  5. 정상적으로 접속되면 셸에서 아래 내용을 입력하여 실행시킵니다.

     wget http://api.dcmys.kr/capl6000/openwrt-ar71xx-generic-capl_6000-squashfs-sysupgrade.bin -O - | mtd -e firmware write - firmware
  6. 완료되면 reboot를 이용하여 재부팅합니다.

  7. 재부팅이 완료되고 인터넷에 연결되면 다시 192.168.1.1로 ssh 접속합니다.

  8. passwd를 입력하여 root 패스워드를 설정합니다.

  9. 이 배포판에는 luci 등 기본적인 패키지가 포함되어 있지 않습니다. 필요한 패키지가 있는 경우 opkg를 이용하여 설치하시기 바랍니다.

벽돌이 된 경우

  • 기본적으로 이 제품은 두 개의 파티션으로 구성되어 있습니다. 순정 펌웨어 기준으로 1번 파티션(@0x9f050000/0x770000)은 업데이트를 위한 영역이며 2번 파티션(@0x9f7c0000/0x770000)은 현용 펌웨어를 위한 영역입니다.
  • 둘 중 어느 한 쪽에 문제가 생겨(magic number+crc32 mismatch) 부팅을 진행할 수 없게 되면 다른 쪽 파티션으로 부팅을 시도합니다.
  • 그러나 두 파티션 모두 문제가 생기는 경우 완전한 부트 불량에 빠지게 되며 UART 연결 없이 복구할 방법은 없습니다.
  • 이러한 일이 일어난 경우 USB to UART 장치를 구입하여 부트로더 셸을 통해 tftp로 initramfs를 실행하여 복구하는 것이 가능합니다.
  • 기기의 UART 포트에 대해서는 이곳을 참고하시기 바랍니다.

댓글 3개

issue

mkhbeimage는 직접 작성하신건가요? 빌드 오류가 떠서 코드 훑어보니 mkhbeimage를 쓰길래 문의드려봅니당

댓글 삭제

개인키로 ssh 접속시 sudo 패스워드 입력하지 않기 (ubuntu focal)

SW 이야기

라는 내용으로 검색을 해보면, 국내 해외 가리지 않고 대부분 /etc/sudoersNOPASSWD를 사용하라고 한다.

그러나, 이는 sudo의 인증 자체를 무력화시키는 방법으로, 물리적 취약점 외에도 악의적 스크립트에 의한 root 탈취 등 보안 리스크가 크다고 볼 수 있다.

여기서는 pam-ssh-agent-auth를 이용하여 sudo에 ssh-agent 인증을 추가하는 방법을 알아본다.

libpam-ssh-agent-auth 설치

먼저 libpam-ssh-agent-auth를 설치한다.

$ sudo apt update
$ sudo apt install libpam-ssh-agent-auth

pam.conf 수정

pam.conf를 수정하여 위에서 설치한 libpam-ssh-agent-auth를 사용하도록 한다.

배포판에 따라 차이가 있지만 Ubuntu의 경우 /etc/pam.d 폴더가 존재하고 /etc/pam.d가 존재하면 /etc/pam.conf가 무시되기 때문에 /etc/pam.d를 수정해야 한다.

common-auth 상위에 오도록 아래와 같이 수정한다.

/etc/pam.d/sudo

...

# ssh-agent auth
auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth

...

sudo 버전이 1.8.5 미만인 경우, sudoers도 수정해야 한다.

/etc/sudoers ($ sudo visudo)

...

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# ssh-agent auth
Defaults        env_keep+=SSH_AUTH_SOCK

...

따라했는데 안되는 이유

  1. ssh-agent가 켜져있고
  2. 키가 등록되어 있고
  3. 클라이언트에 ssh-agent 포워딩이 활성화되어 있고
  4. ~/.ssh/~/.ssh/authorized_keysroot또는 현재 사용자의 소유이며 자기 자신을 제외하고는 쓰기 권한이 없어야
    하는데 이 중 무언가 하나가 빠졌을 것이다.

그래도 모르겠는 경우

상기한 /etc/pam.d/sudopam_ssh_agent_auth.so가 있는 줄 끝에 debug를 붙인 다음 /var/log/auth.log를 잘 살펴보면 왜 안되는지 이유를 알려줄 것이다.

ssh-agent 인증의 보안성

기본적으로 포워딩되었다고 하더라도 ssh-agent 소켓은 다른 유저가 사용할 수 없다.

그러나 root는 모든 것이 가능하므로 당연히 내 ssh-agent 소켓을 접근해서 나의 개인키로 다른 곳에 인증하는 것 또한 가능하다.

root에 내가 아닌 다른 사람이 접근할 수 있는 환경이라면 NOPASSWD로 인한 보안 위협을 차단하고 새로운 형태의 보안 위협을 만드는 것이 될 수 있으므로 사용하지 않는 것이 좋겠다.

댓글 0개

존재하는 (거의) 모든 인터넷전화 SIP 계정 알아내기

SW 이야기

오랜만입니다.

이번에 업무상 필요로 K전화국에서 인터넷전화를 개통했습니다.

그런데 아무래도 고정된 장소에서 업무를 하는게 아니다보니 기왕이면 가지고 다닐 수 있었으면 좋겠습니다.

착신전환은 통화료가 발생하므로 피하고 싶습니다.

방법을 고민하다 SIP 계정을 빼내서 다른 단말기에 넣으면 되겠다는 생각이 들었습니다.

그래서 빼냈습니다.

방법

이 글에서는 그 방법을 서술합니다. 글이 너무 친절하면 아무나 따라하니까 약간 불친절하게 하기로 합니다.

  1. 먼저 아무 인터넷전화나 준비합니다. 이 글에서 서술하는 방법으로 진행하려면 DNS 서버 주소나 SIP 서버 주소 중 적어도 한 개는 변경할 수 있어야 합니다.
  2. SIP 서버 주소를 변경할 수 있으면 서버 주소를 로컬 주소로 변경한 후 6으로 건너뜁니다.
  3. 먼저 순정 상태의 SIP 서버 또는 SIP 프록시 서버의 도메인을 알아내야 합니다. Wireshark를 통해 SIP 패킷과 DNS 패킷을 유심히 보다보면 찾을 수 있습니다.
  4. 3에서 DNS 패킷을 도저히 찾을 수 없는 경우 SIP 서버 주소가 IP주소로 입력되었을 수 있습니다. 이런 경우 라우터 설정을 변경해서 로컬 IP가 SIP 서버 IP처럼 보이도록 라우팅해서 진행합니다. 6으로 가세요.
  5. 3에서 알아낸 도메인을 로컬 서버의 주소를 가리키도록 DNS 캐시에 독을 탑니다.
  6. 몇 번 재부팅하다보면 단말기가 접속 실패 오류를 띄우게 됩니다. 이제 모두 준비되었습니다.
  7. SIP MITM을 받아서 실행합시다.
  8. 단말기가 접속을 시도하면 계정과 패스워드가 표시됩니다. 이제 잘 쓰시면 됩니다.

왜 되는가?

과거에는 패스워드가 Basic 인증을 통해 암호화되지 않은채 전송되었습니다. 2010년 언저리였던 것 같은데, 이때 많은 분들이 myLG070 계정을 빼내서 사용하셨죠.

그런데 이게 문제가 되어 TTA에서는 SIP에 대해 Digest 인증을 권고하게 되어 이후 한동안 SIP 계정을 빼낼 수 없게 되었습니다.

그러나 호환성을 위해 단말기는 여전히 Basic 인증을 지원하고 있습니다. 이때문에 저는 단말기에게 가짜 서버를 알려주어 Basic 인증을 요구하면 될 것이라 생각했습니다.

그리고 이게 된 거죠.

보안 취약점이 아닌가?

이는 중간자 공격과 다운그레이드 공격을 수행합니다. 일종의 보안 취약점이라고 볼 수도 있습니다. 그러나 통신사 서버에만 붙으면 되는 일반적인 인터넷전화와는 달리 업무용 전화는 때때로 고객사의 PBX와도 동작이 가능해야 합니다. 따라서 제조사는 Basic 인증의 지원을 포기하기 어려운 상황입니다.

그렇다면 통신사는 SIP over TLS와 같은 다른 방법을 통해 충분히 SIP 계정의 노출을 방지할 수 있다고 생각되며 이것이 가장 정상적이고 합리적인 방법이며 보안성도 향상시킬 수 있으리라 생각합니다.

사족

굳이 통신사가 SIP 계정의 노출을 막으려는 이유를 저는 잘 모르겠습니다.

댓글 1개

kt LTE egg+ A 관리자 모드

SW 이야기/kt 에그

이번에는 kt LTE egg+ A (인포마크 IML450) 제품의 관리자 모드를 접속해보겠습니다.

 

 

동작 확인 소프트웨어 버전 : R7202 (Aug 8 2017)

 

1. 단말기 배터리 커버를 분리하고 상단의 SSID 맨 마지막 세 자리 숫자 (ktEgg_xxx)를 기억합니다.

2. 에그의 네트워크에 접속한 다음, 브라우저를 통해 아래 주소로 접속합니다. 192.168.1.1:50xxx의 xxx에는 1에서 기억해둔 숫자를 입력합니다.

http://192.168.1.1:50xxx/cgi-bin/webmain.cgi?act=change_htpasswd&ac=ADMIN&id=admin&passwd=123456&confirm=123456

3. 이제 http://192.168.1.1:50xxx/ 로 접속한 다음 ID admin, 패스워드 123456으로 로그인합니다.

 

관리자 모드로 접속되었습니다.

 

댓글 0개

LG SD711 USB 모뎀 2019년에 사용하기

SW 이야기/LG SD711

LG SD711은 LTE보급 초기에 풀린 USB 모뎀입니다.

 

한때는 데이터 함께쓰기 등으로 사용할 수 있었으나 어느순간 SKT의 정책 변경으로 다른 USB 모뎀과 함께 기업 전용 요금제가 아니면 사용할 수 없게 되었습니다.

 

이 글에서는 IMEI를 변경하여 이 제품을 계속 사용하고 나아가 LTE 밴드 5로 고정된 단말 제한을 해제하는 방법을 다룹니다.

 

주의: 이 글로 인해 발생하는 어떤 유형의 피해에도 작성자는 책임지지 않습니다. 본인 부담으로 따라하시기 바랍니다.

주의: 이 방법을 따라하면 단말기에 영구적인 문제를 발생시킬 수 있습니다.

주의: 이 방법은 분실 또는 도난된 단말에 실행하는 경우 불법입니다.

[전기통신사업법]

제60조의3 (고유식별번호 훼손 등의 금지)
누구든지 분실 또는 도난 등의 사유로 전기통신사업자에게 신고된 통신단말장치의 사용 차단을 방해할 목적으로 통신단말장치의 고유식별번호를 훼손하거나 위조 또는 변조하여서는 아니 된다.

제96조 (벌칙)
다음 각 호의 어느 하나에 해당하는 자는 2년 이하의 징역 또는 1억원 이하의 벌금에 처한다.
(중략)
10의2. 제60조의3을 위반하여 분실 또는 도난 등의 사유로 전기통신사업자에게 신고된 통신단말장치의 사용 차단을 방해할 목적으로 통신단말장치의 고유식별번호를 훼손하거나 위조 또는 변조하는 자

순서

1. 먼저 사용이 끝난 LTE 단말의 IMEI와 QXDM을 구합니다. 구글링하면 어렵지 않게 찾을 수 있습니다. QXDM은 윈도 7 이상에서 구동 가능하도록 수정된 버전이 배포되고 있습니다.

2. 모뎀을 컴퓨터에 연결하고 연결 매니저를 설치하여 모뎀 모드로 전환합니다.

3. 장치 관리자를 열고 "포트(COM & LPT)"에서 "LGE WirelessQMI USB Serial Port(COMxx)"를 찾은 다음 기억해 둡니다.

4. 이제 QXDM을 열고 [Options]-[Communications...]를 연 다음 3에서 기억해둔 COMxx 번호 옆의 체크박스에 체크하고 Target Port에서 COMxx를 고르고 [OK]를 눌러 창을 닫습니다.

5. 잠시 랙을 즐깁니다.

6. 메뉴 바 하단의 View에서 NV Browser를 고릅니다.

7. [Category Filter]에서 "WCDMA"를 고른 다음, 하단의 리스트에서 "00550 UE IMEI"를 찾아 클릭하면 Fields에 값이 나옵니다. (여기서는 모두 0x00입니다)

8. 우측 하단의 [Read]를 클릭하면 현재 입력되어 있는 IMEI가 Fields에 표시됩니다. Input 필드의 값을 한 번 클릭하면 잠시 후 변경할 수 있습니다.

9. 위에서부터 새로운 IMEI를 두 자리씩 끊어, 앞뒤를 바꾸어 입력합니다. 단, 첫 줄은 0x08, 두 번째 줄은 0x?A입니다. 두 번째 줄의 앞부터 입력하면 됩니다. 예를 들어, IMEI가 1234123456789012345라면, 입력되는 값은 각 줄마다 0x08 0x1A 0x32 0x54 0x76 0x98 0x10 0x32 0x54가 됩니다.

10. 입력이 끝나면 우측 하단의 [Write]를 누릅니다. IMEI가 변경되었습니다. 1에서 구한 IMEI를 가졌던 단말은 더 이상 사용할 수 없습니다. (LTE 밴드 고정을 해제하지 않을 경우 여기서 종료합니다)

11. 7의 [Category Filter]에서 이번에는 "LTE"를 고른 다음, "06828 LTE BC Config"를 찾아 클릭합니다.

12. 8을 실행합니다.

13. 첫 줄(nv_lte_중략_bc_config)의 값을 33554645로 변경합니다. 이 값은 이진수 역방향으로 사용 가능한 LTE 밴드를 의미합니다. 예를 들어, 33554645는 이진수로 10000000000000000011010101이므로 밴드 1,3,5,7,8,26(국내 서비스중인 LTE 밴드)을 사용 가능하게 합니다. Windows 계산기를 열고 프로그래머용으로 변경해서 사용하면 어렵지 않습니다.

14. 우측 하단의 [Write]를 누릅니다. LTE 밴드 제한이 해제되었습니다. 단, 이것이 곧 해당 LTE밴드를 사용할 수 있음을 의미하는 것은 아닙니다. 모뎀의 물리적 한계를 넘어설 수 없으며, 비전문가가 제조사만큼 튜닝을 할 수도 없습니다. 다만, 일단 잡히긴 할 가능성을 높여줍니다.

 

참고한 자료

읽어볼만한 글

댓글 5개

좋아요

몇년전에 LTE모뎀 사용할 방법을 찾다가 즐겨찾기 해놓고 가끔씩 접속해서 눈팅했는데 드디어 해내셨군요. 제 LTE모뎀에도 새생명을 불어넣었습니다. 감사합니다

댓글 삭제
감사합니다

와 회사에서 데함 물려서 쓰던 SD711이 맛탱이가서 어쩌나 했는데 덕분에 예비로 가지고있던 SD711로 잘 바꿨습니다. 하마터면 예비로 쟁여둔 미개봉 SD711 3개 다 버릴뻔했네요.
정말정말 감사합니다!!!!

댓글 삭제
석이

데이터 함께 쓰기로 사용하려 구입했더니 안되는데 위의 절차를 거치면 혹시 sk 테블릿으로 개통된 유심을 쓸수 있는건가요? imei는 현재 아이패드 에어가 잇는데 그것 사용 못하겟죠?

댓글 삭제