보안뉴스: https://www.boannews.com/media/view.asp?idx=89737
독일의 싱크탱크인 프라운호퍼 인스티튜트(Fraunhofer Institute)가 ‘가정용 라우터 보안 보고서(Home Router Security Report)’를 발표했습니다.
본인 애옹의 노답 영어+번역기 신공과 잡썰을 잔뜩 첨가하여 아래 내용을 작성합니다. 뭐 낄대인이든 누구든 새로 써주시면 환영합니다옹
여러분 영어공부 열심히 하세요
그리고 저 괴상한 도표들은 어떻게 해석해야할지 도저히 모르겠습니다.
애옹의 결론:pfSense 만세
읽기 귀찮으신 분들을 위한 결론:
90퍼 이상의 공유기가 리눅스를 쓰는데 정말 오래된 버전을 씁니다. 많은 공유기가 오래전에 지원이 끊긴 2.6 버전의 커널로 작동합니다. 덕분에 심각한 취약점이 많이 발생하겠군요. 리눅스는 여러가지 메모리 보호 기술들을 제공하지만, NX 비트를 제외하고 거의 안씁니다.
개인 키는 펌웨어에 박혀버려서 보안을 전혀 제공할 수 없습니다. 하지만 제조사들은 펌웨어 이미지에 여러 개의 개인 키를 집어넣습니다.
미라이가 하드코드 된 자격증명으로 엄청 많은 임베디드 장치를 감염시켰는데요, 하드코드 된 자격 증명은 꽤 많은 장치에 있으며, 그 중 일부는 정말 해독하기 쉽습니다.
하지만 제조사들은 보안에 대한 우선순위가 다른 것 같네요. AVM이 그나마 제일 낫고, ASUS와 넷기어가 D-Link, 링크시스, 티피링크 및 Zyxel보다 일부 측면에선 안전합니다.
오픈소스 소프트웨어로도 임베디드 장치의 대규모 자동 보안 분석이 가능했는데, 결함이 없는 라우터도, 모든 보안 측면에서 완벽한 작업을 수행하는 제조사 또는 장치는 없습니다.
보고서를 위해 분석된 라우터는 디링크(D-Link), 넷기어(Netgear), 에이수스(ASUS), 링크시스(Linksys), TP링크(TP-Link), 자이젤(Zyxel)에서 만든겁니다. 목록을 한번 보세요 : https://github.com/fkie-cad/embedded-evaluation-corpus/blob/master/2020/FKIE-HRS-2020.md
127개 모델 중 117개를 자동화 툴인 FACT(https://github.com/fkie-cad/FACT_core)로 펌웨어를 추출할 수 있었고 그 중 116개가 리눅스 기반입니다. 물론 일부 공유기는 WiFi 칩을 위해 ThreadX도 같이 사용합니다.
리눅스 커널 87.9%, 알수 없는게 6.8%, ThreadX가 3.8%, eCos와 MicroC/OS가 각각 0.8%입니다.
공유기의 CPU는 사실 보안과 큰 관계는 없지만 그래도 조사해봤습니다. MIPS랑 ARM이 58개씩 동률입니다. 11개는 서로 다른 이유로 CPU 아키텍처를 모르겠다고 하는군요.
점유율로 따지면 32비트 MIPS가 45.7%로 가장 높은 점유율은 보이는데 리틀앤디언이 25.2%, 빅앤디언은 20.5%입니다. 그 다음으로 많은게 32비트 ARM 리틀앤디언이 44.9%입니다. 8.7%는 도저히 모르겠고 64비트 ARM 리틀앤디언은 0.8%입니다.
본격적으로 연구원들이 검사한 내역입니다. 물론 이 내역들은 모두 팩트로 추출한 결과들이고 몇가지 추출 오류가 있어서 부정확한 데이터가 있을 수도 있으니 그런 것들을 감안하셔야 합니다.
1) 마지막 펌웨어 업데이트 릴리즈
2020년 3월 27일 전 365일동안 81개의 공유기가 업데이트를 받았습니다. 하지만 2020/3/27 이전 마지막업데이트 간의 주기는 378일이군요. 대충 1년동안 아무런 버그 수정이나 보안 취약점 수정이 없단 소립니다. 22개의 공유기는 2년 넘게 업데이트를 받지 못했습니다. 가장 최악은 1969일 동안 업데이트를 못 받았습니다.
2) OS 버전, 그리고 알려진 취약점들
위쪽에서 보셨다시피 대부분 리눅스 커널을 기반으로 펌웨어를 만들었습니다. 오래된 커널은 취약점도 많이 있죠. 그래서 최신의 업데이트는 필수입니다.
하지만 말이죠, 30퍼 넘는 공유기들의 커널 버전이 참으로 끔찍하게도 2.6.36 또는 그보다 낮은 버전이네요. 2.6.36버전의 마지막 보안 업데이트는 2011/02/17인데요 (독일 위키피디아 기준), 9년이나 넘었습니다.
2.6.32는 LTS 버전이라 오래오래 지원받았지만 그래도 2016년 2월에 지원이 끊겼죠. 링크시스의 WRT54GL은 2.4.20 커널에서 돌아갑니다. 2002년산입죠. 넷기어랑 TPLink가 2.6.36 커널을 많이 사용합니다.
3) 제조사에서 제공하는 취약점 완화 방법
임베디드 리눅스를 취약점에서 보호하기 위한 여러 기술들이 있습니다. NX, PIE, RELRO, 스택 카나리, FORTIFY_SOURCE 등으로 메모리 보호를 할 수 있죠.
NX는 거의 대부분 적용했습니다. 물론 통계의 함정이죠. PIE부터 적용률이 확 떨어져서 RELRO, 스택 카나리, FORTIFY_SOURCE는 거의 안보입니다. 이것들도 AVM이 적용해서 그렇지 다른 회사는 거의 쓰지도 않았습니다.
4) 펌웨어 내 비밀 암호화 키와 관련된 정보의 유무
암호화 키는 대체로 3가지 사용 시나리오가 있는데 : 안전한 통신 채널, 데이터 서명, 원격 서비스에 로그인입니다.
이것들을 쉽게 추출할 수 있다면 중간자 공격 등에 써먹을 수 있겠죠? 그래서 OWASP는 임베디드 장치에 하드웨어적으로 보안 장치를 설치하라고 합니다.
하지만 말이죠, 거의 대부분 평균 5개 이상의 개인키가 펌웨어 이미지 안에 있습니다. 넷기어 R6800은 13개의 개인키가 있군요? 역시 AVM은 하나의 개인키도 없지만 다른 곳들은 참...
6) 하드코드 된 로그인 자격증명의 존재 여부
미라이 봇넷이 한때 악명을 떨쳤죠. 임베디드 장치 내에 하드코드 된 계정을 이용하여 권한을 탈취한 다음 공격에 이용됐습니다. 하드코드 된 자격 증명이 탈취당하면 다른 장치들에도 피해를 입힐 수 있습니다. 물론, 그게 쉬운 비밀번호로 코딩되었다면 더더욱 쉽게 탈취당하겠죠. 최악의 경우는 (자칭) 보안이 뛰어나다고 자부하는 어떤 사과 회사처럼 비밀번호를 평문으로 저장한 경우입니다.
그리고 이 암호를 사용자가 바꿀 수 없다면 왠지 "그 국가"처럼 백도어의 통로로 이용될 수 있다고 생각하겠죠. FACT는 /etc/shadow 또는 htaccess에서 하드코딩 된 비밀번호를 찾아낼 수 있습니다. 물논, 가장 흔히 사용되는 1만 개의 비밀번호 목록(https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/10k-most-common.txt)에 있는지도 체크해볼 것이고 추출한 해쉬는 존 더 리퍼로 사전 공격을 시행해서 뚫리는지도 테스트 할겁니다.
정말 다행스럽게도, 60% 이상의 펌웨어 이미지에는 하드코드 된 로그인 자격증명이 없습니다. 다르게 말해서 40%는 존재한단 소리고요. 50개의 라우터가 하드코드 된 자격 증명을 펌웨어에 보관합니다.
그 중 16개는 정말 뚫리기 쉬운 암호를 씁니다. 노답 중의 노답인 넷기어 RAX40의 경우 root:amazon, nobody:password, admin:password 이렇게 하드코드 해뒀네요. 우와...
하지만 이 자격증명으로 원격 로그인을 할 수 있는진 잘 모르겠습니다. 아수스만 펌웨어 이미지에 하드코드 된 자격증명을 제공하지 않습니다.