ISO 하나 받으려다 커널 익스플로잇까지 짜게 됐습니다

Wanted to download an ISO, ended up writing a kernel exploit

blog.dfb.sh ▲ 354 댓글 173 0xdeafbeef

요약

무선 AP가 다운로드를 조용히 망가뜨렸고, 설정 두 개를 바꾸려고 커널 익스플로잇까지 짰습니다.

한 개발자가 티피링크 EAP770 v1 무선 AP(유선망을 와이파이로 잇는 장치)를 고친 기록입니다. 와이파이로 큰 파일이나 NixOS ISO를 받으면 자꾸 깨졌는데, 해결책은 간단했지만 제조사가 그 권한을 막아 두었습니다.

왜 중요한가

  • TCP 검사를 통과하는 데이터 손상은 TLS·SSH처럼 끝단에서 다시 확인하지 않으면 모르고 지나갈 수 있습니다.
  • 개봉 전에 이미 지원이 끝난 기기라, 원인을 알아낸 사용자도 정상적인 방법으로는 고칠 수 없었습니다.

핵심 내용

  • 퀄컴의 하드웨어 오프로드(패킷 처리를 전용 회로에 맡기는 기능) 드라이버가 캐시를 제대로 정리하지 않아 받은 패킷이 덮였습니다.
  • 오프로드가 망가진 데이터로 TCP 체크섬을 다시 계산해서, TCP는 손상을 알아채지 못했습니다.
  • sysfs(커널 설정을 파일처럼 다루는 창구) 값 두 개를 0으로 바꿔 오프로드를 끄면 해결됐습니다.
  • 제조사 셸이 루트 권한을 주지 않아, 작성자는 2022년에 공개된 커널 취약점으로 권한을 얻었습니다.
  • 오프로드를 끄자 밤샘 시험에서 손상이 사라졌고, 속도는 약 8% 줄었습니다.

작성자 설명

작성자입니다. 나머지 드라이버는 어떻게 해야 할지 아시는 분 있습니까? 같은 유형의 버그가 있는 커널 내장 드라이버를 적어도 13개 찾았습니다. 고약하게도 이 드라이버들은 x86에서는 잘 돌아가고, ARM처럼 캐시 일관성이 보장되지 않는 아키텍처에서는 데이터를 조용히 망가뜨립니다. 저는 그 하드웨어가 없어서 시험해 볼 수도 없습니다.

드라이버가 캐시 관리를 손으로 하지 않도록 DMA API가 있는 것이라고 짐작합니다. 다만 저는 커널 개발자가 아니라서 뭔가 놓치고 있을 수도 있습니다.

HN 반응

  • 처음부터 제대로 안 되는 장비는 반품하고 티피링크를 사지 말자는 의견에, 오프로드 버그는 비싼 기업용 랜카드에도 흔하다는 반론이 나왔습니다.
  • OpenWrt를 설치하자는 제안에는, 펌웨어 파일을 잘못 고르면 기기가 먹통이 된다는 경험담이 맞섰습니다.

댓글

30개 표시 · 전체 173개
  1. knotimpressed HN

    SFE/PPE가 무슨 뜻인가요?

  2. Shank HN

    연결이 좀 불안정해서 가끔 동영상이 버퍼링되곤 했지만, 크게 신경 쓰지는 않았다.

    이건 정말 말도 안 됩니다! 제발, 첫날부터 제대로 작동하지 않는 하드웨어를 샀다면 반품하세요. 지갑으로 표를 던지지 않으면 이런 회사들은 절대 배우지 않고 관행도 고치지 않습니다. 그 형편없는 하드웨어를 그냥 계속 쓰는 건 TP-Link에게 상을 주는 일일 뿐입니다.

    6월에 지원팀에 문의했다. 웹사이트에 v2용 펌웨어밖에 없었기 때문이다. 그쪽에서는 데이터베이스에서 v1을 찾지 못했고, 기기와 박스 사진을 보내 달라고 했다.

    !!

  3. alias_neo HN

    첫 번째는 TP-Link 공유기를 사지 않는 겁니다.

    예산이 빠듯한 분들이 있다는 건 압니다. 하지만 이 기기들에 들어 있는 코드를 보고 나니, 품질이 얼마나 형편없고 얼마나 쉽게 뚫리는지 번번이 확인했기 때문에 저는 TP-Link(와 그 밖의 몇몇 회사)를 다시는 사지 않을 겁니다.

    한동안 제조사에게 버려진(심각한 취약점이 있는) 공유기들을 모아서 "무덤"을 만들었습니다. 언젠가 전부 정리해서 글로 쓸 생각이었죠. 그런데 정신 차려 보니 아이 둘은 어느새 두 자릿수 나이를 바라보고 있고, 우리가 매일 사는 제품의 코드가 얼마나 엉망인지 글로 쓰는 것보다 훨씬 나은 일들이 인생에 많아졌더군요.

    7~8년 전에 Coreboot과 OPNsense를 올린 Protectli 박스로 갈아탔고 한 번도 돌아보지 않았습니다. AP와 스위치는 Ubiquiti를 씁니다. 최고라고 말하려는 건 아니지만, 기업이나 엔터프라이즈 환경에서 쓰는 장비라면 적어도 지원은 더 낫습니다(코드 품질까지 낫지는 않더라도요).

    Ubiquiti AP의 좋은 점은 와이파이 세대가 한두 번 바뀔 때마다 몇 대 더 사서, 여기저기 천장에 붙어 있는 기존 AP를 똑 떼어 내고 새것을 똑 끼운 다음 어댑트(adopt)만 하면 끝이라는 겁니다.

  4. emilburzo HN

    아니면 TP-Link 공유기를 사서 OpenWrt를 올리세요. 양쪽의 장점을 다 누릴 수 있습니다.

  5. xattt HN

    그러면 펌웨어를 업그레이드할 때마다 똥줄이 탑니다. 저도 겪어 봤어요.

    이건 일종의 생활 방식 선택이죠... 새벽 3시에 일어나 전부 다시 구축하는 날이 오기 전까지는요. openwrt-24.10.0-ath79-generic-tplink_archer-c7-v2-squashfs-sysupgrade.bin을 올려야 하는데 openwrt-24.10.0-ath79-generic-tplink_archer-c7-v2-squashfs-factory-FOR-C7-V5-EU-NOT-V2-US.bin을 올려서 AP를 벽돌로 만들었을 때 말입니다.

  6. ac29 HN

    이제 웹 UI에 원클릭 업데이트가 있어서 아무 bin 파일이나 플래시할 필요가 없습니다.

  7. xattt HN

    그렇다면 좋은 소식이네요. 저는 제 예시와 비슷한 일을 겪고 7년쯤 전에 OpenWrt 생태계에서 손을 뗐습니다.

    대표적인 사례가 Asus RT-56N 공유기였는데, 결국 통신사 와이파이 장비로 바꿔야 했습니다.

  8. emilburzo HN

    요즘은 그런 사소한 일에 신경 쓰고 싶지 않으면 그냥 Claude한테 시키면 됩니다... 저도 반신반의했는데 완벽하게 해냈어요.

    게다가 제 빠른 로밍 설정이 덜 되어 있다는 것도, 제가 쓰던 5GHz 채널이 규정 때문에 켜지는 데 60초나 걸리는 채널(DFS 채널)이라는 것도 찾아냈습니다.

  9. smallerize HN

    그렇게 민감한 작업 앞에 왜 난수 생성기를 세워 두는지 저는 이해가 안 됩니다. 출력 샘플러가 xatt가 올린 것 같은 다소 확률이 낮은 문자열을 고르는 건 시간문제예요. 아니면 그냥 데이터를 지워 버리거나요.

  10. emilburzo HN

    제가 이 작업을 백만 번은 해 봤고, "난수 생성기"가 뭘 할 수 있는지 보고 싶었으니까요? 설정 백업도 있고 벽돌 복구하는 법도 아니까요?

    직접 써 보세요. 얼마나 꼼꼼한지 놀라실 겁니다. 모든 게 문제없이 넘어가도록 업그레이드 전, 중, 후에 확인한 항목이 저보다 확실히 많았어요. 그리고 xattt보다는 분명히 많았고요, 보아하니 ;)

  11. smallerize HN

    대부분은 잘 작동한다는 건 압니다. 저는 그 판돈이 얼마인지를 분명히 하고 싶을 뿐입니다.

    "설정 백업도 있고 벽돌 복구하는 법도 아니까요?" 저한테는 이 부분이 중요합니다. 저는 잃어도 감당할 수 있는 선을 넘겨서 도박하지 않습니다.

  12. perching_aix HN

    복구 경로와 위험의 한계는 언제나처럼 똑같이 적용됩니다.

    오히려 이 "난수 생성기"들은(사실은 난수 생성기가 아니니 그런 용도로는 절대 쓰지 마세요, 당연히):

    • 더 신중하고,

    • 백업을 더 선뜻 만들고, 보관하고, 테스트하고, 사용하고,

    • 복구 경로를 확인하고 실제로 택하고,

    • 리허설(dry run)을 하고,

    • 중간에 끊기는 상황까지 고려하고,

    • 더 많은 정보를 캐내고,

    • 스모크 테스트도 더 많이 하고,

    • 문제가 생기면 더 깊고 더 넓게 분석할 준비도 더 잘 되어 있습니다.

    보통 사람보다요.

  13. smallerize HN

    저는 무작위성에 대해 아주 문자 그대로 말하는 겁니다. 언어 모델은 가능한 모든 출력 토큰에 대한 분포를 내놓고, 선택된 출력은 그 분포에서 샘플링됩니다. 이 과정에는 모델이 매긴 순위로 1위가 아닌 토큰이 나오는 경우도 일부러 포함되어 있습니다.

  14. antonvs HN

    아니요, 전혀 문자 그대로가 아닙니다. 언어 모델이 난수 생성기라면 출력은 횡설수설일 겁니다. 그게 문자 그대로예요.

  15. smallerize HN

    그 무작위성은 한쪽으로 편향되어 있어서 보통은 괜찮습니다. 하지만 가끔은 출력이 횡설수설이 되기도 해요. 당신의 LLM한테 샘플링 온도가 뭔지 물어보세요.

  16. perching_aix HN

    딱 2초만 생각해 보세요.

    맞아요, 무작위성이 관여하긴 합니다. 하지만 샘플러 앞에 수십억, 수조 개짜리 파라미터의 모델이 있어서 그 무작위성을 지독하게 편향시키며 완전히 짓뭉개 놓은 상태죠.

    아니면 평범한 ChatGPT 프롬프트 응답과 다음 코드의 출력을 비교해 보세요.

      import tiktoken, secrets
    
    enc = tiktoken.get_encoding("o200k_base")
      tokens = tuple(enc._mergeable_ranks.values())
      msg_len = 128 + secrets.randbelow(2048 - 128)
      token_ids = [secrets.choice(tokens) for _ in range(msg_len)]
      print(enc.decode(token_ids))
    

    별로 닮지 않았다는 걸 아실 겁니다. 또 LLM은 "temperature" 파라미터를 0으로 설정할 수 있고, 그러면 샘플링에 무작위성이 사라진다는 점도 아실 겁니다. 그럴 때는 여러 실행 환경 조건에 따라 바이트까지 똑같은 입력을 넣으면 매번 바이트까지 똑같은 출력이 나올 정도입니다. 추론 엔진에 따라서는 머신이 달라도 그럴 수 있고요.

    "더 높은 차원", 그러니까 모델이 내놓는 언어에 스며든 무작위성을 말씀하시는 거라 해도, 도구 호출을 끈 모델에게 무작위 숫자나 단어를 달라고 해 보세요. 별로 무작위적이지 않다는 걸 알게 될 겁니다. 적어도 제가 심심풀이로 해 봤을 때는 그랬습니다.

  17. smallerize HN

    제 말은, 검색과 코딩에 LLM을 써 보면 예측할 수 없게 틀린 답을 내놓는 일이 늘 있다는 겁니다. 방향을 바로잡아 주면 자기가 틀렸다고 인정하는 경우도 많고요. 그러니까 제게 필요한 지식이 어딘가에 들어 있긴 해도, 그게 믿을 만하게 적용되지는 않는 거죠. 저는 인프라에서 그런 경험을 하고 싶지 않습니다. 모델이 대체로 맞히긴 하지만 눈에 띌 만한 비율로 틀리니까요.

    무슨 말인지 아시겠죠?

  18. Wowfunhappy HN

    당첨 번호를 합리적인 확률로 계속 뱉어 내는 의사 난수 생성기가 있다면 저는 그걸로 복권을 사겠습니다. 도저히 불가능해 보이고, 알고리즘을 연구해도 어떻게 작동하는지 이해하지 못하더라도, 그래도 쓸 겁니다.

    지금 LLM에 대한 제 느낌이 딱 그렇습니다. 이게 어떻게 가능한지는 전혀 모르겠는데, 어쨌든 되는 것 같거든요.

  19. charcircuit HN

    xatt가 사람한테 맡기면 안 된다는 걸 증명한 것 아닌가요? 저라면 사람보다 최신 프런티어 모델을 더 믿겠습니다.

  20. skrtskrt HN

    복구 수단도 없는 벽돌 공유기가 되기 너무너무 쉽습니다.

    쓰레기통에서 건져 온 공유기라면 해 보세요. 돈 주고 산 거라면 하지 마시고요.

  21. alias_neo HN

    한두 번 해 봤는데, OpenWrt를 지원하는 정확한 하드웨어 리비전을 찾는 데 질려 버렸습니다. 어차피 저는 OPNsense가 훨씬 마음에 들고, 일반 하드웨어에서 돌아가니 제가 완전히 통제할 수 있기도 하고요.

  22. 0xdeafbeef HN

    이건 공유기가 아니라 AP라서, 제 생각에는 그냥 LAN을 와이파이로 이어 주는 브리지이고 칩을 감싼 껍데기일 뿐이에요 :) 다들 추천하더라고요. PoE도 되고 로밍도 되고요. 소비자용 제품을 사고 나면 더는 만지작거리지 않아도 될 줄 알았죠 ㅋㅋ Ubiquiti를 알아보긴 할 텐데, 왠지 엄청 비싸다고만 생각해서 한 번도 안 들여다봤습니다.

  23. alias_neo HN

    말씀하신 경험을 보면 그쪽 AP도 엉망인 모양이네요. 해결해 보려는 노력은 박수를 보냅니다만, 저는 이제 집 네트워크에 관해서는 "이런 건 나이 들어서 못 해 먹겠다"는 심정입니다. 저(와 아내, 아이들)는 그냥 잘 돌아가기만 바라서 돈을 꽤 들였습니다.

    Ubiquiti AP는 괜찮아요. 저한테는 믿음직했고, 거의 10년 된 AP도 아직 쌩쌩합니다. 새 세대가 나오면 그냥 교체하거나 커버리지를 넓히고, 오래된 건 강한 최신 와이파이가 필요 없는 곳으로 옮깁니다. 제 삶을 단순하게 해 주는 Unifi 생태계에 있지 않았다면 아마 Ruckus를 알아보거나, Mikrotik에 쓸 만한 게 나왔는지 봤을 겁니다.

    지금은 제가 자체 호스팅하는 Unifi 서버가 AP를 최신 상태로 최적화해서 유지해 줍니다. 그래서 AP를 꽂고, 어댑트하고, 잊어버리면 알아서 설정되고 끝입니다. 요즘 제가 원하는 관여 수준이 딱 그 정도예요.

    마침 Steam Frame을 동글에서 떨어진 곳에서 쓰려면 지금 와이파이가 잘 안 터지는 곳에 AP가 하나 더 필요합니다. 그래서 하나(아마 7-Pro나 7-Pro-XG) 사서 그 방의 이더넷 포트에 꽂고, 몇 분 기다리면 바로 쓸 수 있을 겁니다.

  24. kkapelon HN

    Ubiquiti AP의 좋은 점은 와이파이 세대가 한두 번 바뀔 때마다 몇 대 더 사서, 여기저기 천장에 붙어 있는 기존 AP를 똑 떼어 내고 새것을 똑 끼운 다음 어댑트만 하면 끝이라는 겁니다

    이게 왜 Ubiquiti만 되는 건가요? 관리형 AP를 파는 다른 회사 제품으로도 할 수 있지 않나요?

  25. db48x HN

    네, 할 수 있습니다. 하지만 Ubiquiti는 이런 기능을 홍보도 잘했고 "프로슈머" 시장에서도 쓸 수 있게 만들었습니다. 다른 브랜드 대부분은 기업 영업을 거치거나, 총판을 통하거나, 중고로 구해야 하죠. Cisco가 역대 최고의 AP를 만들었을지도 모르지만, 집에서 쓰려면 행운을 빕니다.

  26. InsidiousWombat HN

    하드웨어 오프로드 버그는 하드웨어 오프로드가 나온 이래로 NIC의 골칫거리였고(그건 일반 소비자용만이 아니라 비싼 엔터프라이즈 제품도 마찬가지입니다), 드라이버 탓일 수도 있지만 대부분은 하드웨어나 펌웨어 쪽 문제입니다. 그래서 이번 건으로 TP-Link를 너무 나쁘게 보지는 않을 겁니다.

    EU가 사실상 5년간 업데이트를 의무화하려는 움직임이 이런 문제를 좀 낫게 만들까 궁금하네요. 하긴 이건 보안 버그가 아니라 기능상의 버그이긴 합니다만...

  27. layer8 HN

    EU가 사실상 5년간 업데이트를 의무화하려는 움직임

    그건 스마트폰과 태블릿에만 적용되는 걸로 알고 있습니다.

  28. looperhacks HN

    CRA는 모든 종류의 기기에 적용됩니다.

  29. adfgaionio HN

    6월에 지원팀에 문의했다. 웹사이트에 v2용 펌웨어밖에 없었기 때문이다. 그쪽에서는 데이터베이스에서 v1을 찾지 못했고, 기기와 박스 사진을 보내 달라고 했다.

    !!

    저도 이런 일을 겪고 충격받았습니다. 우리 회사 창고에 Dell 스위치가 굴러다니고 있었어요. Dell Powerswitch 어쩌고저쩌고_b라는 모델이었는데, 크고 비싼 엔터프라이즈 스위치였죠. 설치하려고 보니 온라인에서 그 모델의 매뉴얼을 찾을 수가 없더군요. Dell에 물었더니 접미사가 없는 어쩌고저쩌고 모델만 만들었다는 겁니다. 그런데 저희한테는 Dell에서 직접 샀다는 기록이 있었거든요.

    이런 일이 있긴 있나 봅니다. 어떻게 그런지는 저도 모르겠어요.

  30. naishoya HN

    예전에는 저도 놀랐는데, 여러 번 겪어 보니 이제는 그러려니 합니다. 여러 회사가 만들었다고 하거나 만든 것으로 알려졌지만 실제로는 그 회사의 장부에 없는 기기들이 오가는 회색 시장이 예전에도 있었고 지금도 상당합니다.

    글로벌 공급망의 결과죠.

    일화이긴 한데, 캘리포니아에 있는 초고급 오디오 장비 제조사를 처음 설계하고 소유한 분을 알았습니다. 일급 스튜디오와 음향 재생의 기준 장비로 쓰이는 그런 장비 말이에요. 이분의 섀시 설계를 라이선스 없는 업체들이 복제해서 만들고 있었습니다. 오디오 시장에서 직접 경쟁하는 것은 아니었지만, 알아보는 사람은 알아보는 모양에 품질과 외관이 그만큼 좋을 거라는 암시가 깔려 있었죠. 그분은 지금 쓰는 섀시 제조사가 완전히 마음에 들지는 않았던 터라, 그 업체들이 새로운 공급처가 될 수 있을지 알아보려고 처음 연락이라도 해 보려 했습니다. 그 모조품들은 사실 아주 잘 만들어져 있었거든요(저희도 그중 하나를 그분 집 미디어 Slimserver에 썼습니다). 그런데 첫 이메일을 보내자마자 그쪽은 조직 구조를 완전히 해체하고 연기처럼 사라졌고, 몇 달 뒤에 똑같은 회색 시장 기기들이 다른 법인 이름으로 다시 나타났습니다.

    Dell, HP, Asus, Cisco, Brocade(Silkworm), Qualcomm, Foxconn, Liftmaster 등 온갖 회색 시장 제품을 봤습니다. 끝도 없어요. 이런 걸 가리키는 용어는 무허가 생산, 화이트 브랜딩, 아니면 부품 하청업체가 같거나 아주 비슷한 기기를 실제로 과잉 생산하는 경우의 3교대 생산(three shift production)이라고 알고 있습니다.

    규제 대상 시장에서는 이런 문제에 선제적으로 대응하지 않으면 꽤 위험해질 수 있습니다. 사실상 처음부터 끝까지 "구매자가 알아서 조심해야" 했습니다.

Hacker News에서 보기 ↗