Belkin Wemo Smart Plug V2 – 패치되지 않는 버퍼 오버플로

Belkin Wemo Smart Plug V2 – 패치되지 않는 버퍼 오버플로

소스 노드 : 2657924

IoT 보안 회사 Sternum의 연구원 파고 들다 잘 알려진 장치 브랜드 Belkin의 인기 있는 홈 오토메이션 메인 플러그.

그들이 본 모델은 위모 미니 스마트 플러그 (F7C063) 유통 기한이 거의 다 되어가는 것 같지만 설정 방법에 대한 Belkin 사이트의 자세한 조언과 지침과 함께 온라인에서 판매되는 제품을 많이 찾았습니다.

오래된 것일 수도 있지만(단기적으로 현대적인 의미에서) 연구자들은 다음과 같이 지적했습니다.

이 장치에 대한 우리의 초기 관심은 연구실 주변에 놓여 있고 집에서 사용되는 장치에서 비롯되었으므로 장치가 얼마나 안전한지(또는 그렇지 않은지) 확인하고 싶었습니다. [... T]이 제품은 꽤 인기 있는 소비자 기기인 것 같습니다[; 이 수치를 바탕으로 아마존의 총 매출이 수십만 달러에 달할 것이라고 추정하는 것이 안전합니다.

간단히 말해서, 이미 이러한 것들을 구입하고 연결했으며 지금 집에서 전기 콘센트를 제어하기 위해 사용하고 있는 많은 사람들이 있습니다.

간단히 말해서 "스마트 플러그"는 기존 벽면 콘센트에 꽂는 전원 소켓으로 벽면 콘센트 전면에 있는 전원 콘센트와 동일한 모양의 전원 콘센트 사이에 Wi-Fi 제어 스위치를 삽입합니다. 스마트 플러그의 앞면입니다. 예를 들어 둥근 유로 소켓을 삼각형 영국 소켓으로 변환하는 대신, 예를 들어 수동 전환 US 소켓을 전자 전환 US 소켓으로 변환하여 앱이나 웹형 인터페이스.

IoT의 S…

많은 소위 사물 인터넷(IoT) 장치의 문제는 오래된 농담처럼 "IoT"의 문자 "S"가 보안을 의미한다는 것입니다.

… 물론 이는 사이버 보안이 기대만큼 많지 않거나 전혀 존재하지 않는 경우가 많다는 것을 의미합니다.

상상할 수 있듯이 안전하지 않은 홈 오토메이션 장치, 특히 집 밖에 있거나 지구 반대편에 있는 사람이 전기 제품을 마음대로 켜고 끌 수 있는 장치는 많은 문제를 일으킬 수 있습니다.

우리는 이전부터 다양한 제품의 IoT 불안정성에 대해 글을 쓴 적이 있습니다. 인터넷 주전자 (예, 정말) 집 Wi-Fi 비밀번호를 도둑이 보안 카메라에 유출할 수 있습니다. 당신을 주시 네트워크에 연결된 디스크 드라이브가 손상될 위험이 있습니다. 랜섬웨어에 휩싸인 인터넷을 통해 직접.

이 경우 연구원들은 2023년 2023월에 Wemo Mini 스마트 플러그에서 원격 코드 실행 구멍을 발견하고 2023년 XNUMX월에 보고했으며 XNUMX년 XNUMX월에 이에 대한 CVE 번호를 받았습니다.CVE-2023-27217).

불행하게도 실제 세계에서 활발하게 사용되는 이러한 장치가 거의 확실함에도 불구하고 Belkin은 장치가 "수명을 다한" 것으로 간주하므로 보안 허점을 패치하지 않을 것이라고 밝혔습니다.

(장치가 120V AC 또는 230V AC 전기 회로에 결함이 있는 것으로 판명된 경우 이러한 종류의 "수명 종료" 폐기가 얼마나 용인될 수 있는지 확신할 수 없습니다. 그러나 장치의 저전압 디지털 전자 장치 또는 펌웨어의 결함은 무시할 수 있는 것으로 보입니다. 사이버 공격자가 장치의 주 전원 스위치를 마음대로 반복적으로 켜고 끄는 것으로 이어질 수 있더라도 무시할 수 있습니다.)

친근한 이름이 적이 될 때

연구자들이 발견한 문제는 오래된 스택 버퍼 오버 플로우 소위 변경할 수있는 장치 소프트웨어 부분에서 FriendlyName 기기의 – 휴대전화의 앱으로 기기에 연결할 때 표시되는 텍스트 문자열입니다.

기본적으로 이러한 장치는 줄을 따라 친숙한 이름으로 시작합니다. Wemo mini XYZ어디로 XYZ 우리가 추측하고 있는 XNUMX개의 XNUMX진수 숫자가 의사 무작위로 선택되었음을 나타냅니다.

즉, 이러한 장치를 XNUMX~XNUMX개 소유하고 있더라도 쉽게 설정할 수 있도록 거의 확실하게 다른 이름으로 시작할 것입니다.

그러나 나중에 쉽게 구분할 수 있도록 다음과 같이 친숙한 이름을 할당하여 나중에 이름을 바꾸고 싶을 것입니다. TV power, Laptop chargerRaspberry Pi server.

Belkin 프로그래머(또는 더 정확하게는 다른 브랜드 이름에 스마트 플러그 소프트웨어를 공급했을 수도 있는 이러한 Belkin 브랜드 장치에서 종료된 코드의 프로그래머)는 분명히 68바이트의 임시 저장소를 예약하여 이름 바꾸기 과정에서 새 이름.

그러나 그들은 당신이 제공한 이름이 그 68바이트 슬롯에 맞는지 확인하는 것을 잊었습니다.

대신, 그들은 공식 전화 앱을 사용하여 장치 이름 변경 프로세스를 수행할 것이라고 가정했으며, 따라서 버퍼 오버플로를 방지하기 위해 먼저 장치로 전송되는 데이터의 양을 제한할 수 있습니다. 생기다.

아이러니하게도 그들은 장치 자체가 제대로 작동하는 데 필요한 68바이트 제한을 유지하는 것뿐만 아니라 30자만 입력하도록 제한하기까지 많은 주의를 기울였습니다.

우리 모두는 서버 측에서 오류를 확인하는 대신(또는 더 나은 방법으로) 클라이언트 측에서 오류 확인을 수행하도록 하는 것이 왜 끔찍한 생각인지 알고 있습니다.

  • 클라이언트 코드와 서버 코드가 적합성에서 벗어날 수 있습니다. 미래의 클라이언트 앱은 72자 이름이 좋은 옵션이라고 결정하고 안전하게 처리할 수 있는 것보다 더 많은 데이터를 서버로 보내기 시작할 수 있습니다. 미래의 서버 측 코더는 아무도 예약된 전체 68바이트를 사용하지 않는 것처럼 보였고 24바이트가 충분해야 한다고 무심코 결정할 수 있습니다.
  • 공격자는 앱을 사용하지 않도록 선택할 수 있습니다. 자체 요청을 생성하고 기기로 전송함으로써 앱에만 의존하는 모든 보안 검사를 쉽게 우회할 수 있습니다.

연구원들은 새 이름을 위해 예약된 메모리 버퍼의 끝에 쓰고 바로 뒤따르는 바이트에 저장된 데이터를 손상시킴으로써 마음대로 Wemo 장치를 충돌시킬 수 있는 지점까지 더 긴 이름을 빠르게 시도할 수 있었습니다.

스택 손상

불행하게도 스택 기반 운영 체제에서 대부분의 소프트웨어는 스택 기반 임시 메모리 버퍼가 배치된 상태로 끝나므로 대부분의 이러한 버퍼 뒤에 프로그램이 무엇을 완료했을 때 어디로 가야 하는지 알려주는 또 다른 중요한 메모리 블록이 옵니다. 지금 하고 있습니다.

기술적으로 이러한 "다음으로 이동할 위치" 데이터 청크는 다음과 같이 알려져 있습니다. 반품 주소, 프로그램이 호출할 때 자동으로 저장됩니다. 기능서브 루틴, 프로그램의 여러 부분에서 사용할 수 있게 하려는 코드 덩어리(예: "이 메시지 인쇄" 또는 "경고 대화 상자 팝업")입니다.

반환 주소는 서브루틴이 사용될 때마다 마법처럼 스택에 기록되므로 컴퓨터는 서브루틴이 호출된 위치로 돌아가기 위해 경로를 자동으로 "풀어" 활성화할 때마다 다를 수 있습니다.

(서브루틴에 고정된 반환 주소가 있는 경우 프로그램의 한 위치에서만 호출할 수 있으므로 처음부터 해당 코드를 별도의 서브루틴으로 패키징하는 것은 의미가 없습니다.)

상상할 수 있듯이 서브루틴이 실행을 마치기 전에 해당 마법의 반환 주소를 짓밟는 경우 서브루틴이 완료되면 자신도 모르게 잘못된 위치로 "풀립니다".

운이 좋으면 공격자가 반환 주소를 독창적으로 짓밟는 방법을 미리 예측하여 고의적이고 악의적인 방식으로 프로그램을 오도할 수 있습니다.

단순히 충돌하는 대신 잘못 지정된 프로그램을 속여 공격자가 선택한 코드를 실행하도록 할 수 있습니다. 원격 코드 실행 익스플로잇 또는 RCE.

두 가지 일반적인 방어는 이러한 종류의 익스플로잇으로부터 보호하는 데 도움이 됩니다.

  • ASLR이라고도 하는 주소 공간 레이아웃 무작위화. 운영 체제는 프로그램이 실행될 때마다 의도적으로 약간씩 다른 메모리 위치에 프로그램을 로드합니다. 이것은 공격자가 단순히 코드를 충돌시키는 대신 궁극적으로 제어권을 얻고 유지하는 방식으로 버그가 있는 프로그램을 오도하는 방법을 추측하기 어렵게 만듭니다.
  • 스택 카나리아, 메탄이 있으면 기절하여 잔인하지만 폭발 위험에 대한 효과적인 조기 경고를 제공하기 때문에 광부들이 지하로 가져가곤 했던 새의 이름을 따서 명명되었습니다. 이 프로그램은 서브루틴이 호출될 때마다 반환 주소 바로 앞에 알려졌지만 임의의 데이터 블록을 의도적으로 삽입하므로 버퍼 오버플로가 피할 수 없이 탐지 가능하게 먼저 "카나리아"를 덮어씁니다. 가장 중요한 반송 주소에.

익스플로잇이 빠르고 안정적으로 작동하도록 하기 위해 연구원은 Wemo 플러그를 강제로 ASLR을 꺼야 했습니다. 원격 공격자는 이 작업을 수행할 수 없지만 실제 생활에서 많은 시도를 통해 공격자는 그럼에도 불구하고 운이 좋을 수 있습니다. 프로그램에서 사용 중인 메모리 주소에서 제어권을 얻습니다.

그러나 연구자들은 스택 카나리아 문제에 대해 걱정할 필요가 없었습니다. 버그가 있는 앱이 "카나리아 검사 안전 지침 삽입" 기능이 꺼진 상태로 소스 코드에서 컴파일되었기 때문입니다.

(카나리아 보호 프로그램은 안전 검사를 수행하기 위해 모든 서브루틴에 추가 코드가 필요하기 때문에 일반적으로 보호되지 않은 프로그램보다 약간 크고 느립니다.)

무엇을해야 하는가?

  • Wemo Smart Plug V2 소유자라면, 인터넷을 통해 "외부"에서 장치에 액세스할 수 있도록 홈 라우터를 구성하지 않았는지 확인하십시오. 이렇게 하면 전문 용어로 알려진 내용이 줄어듭니다. 공격 표면적.
  • 범용 플러그 앤 플레이를 지원하는 라우터가 있는 경우, UPnP라고도 합니다. 꺼져 있는지 확인하세요. UPnP를 사용하면 내부 장치가 부주의하게 외부인에게 쉽게 공개될 수 있습니다.
  • 당신이 프로그래머라면, 단지 몇 바이트를 절약하기 위해 소프트웨어 안전 기능(예: 스택 보호 또는 스택 카나리아 검사)을 끄지 마십시오. 정말로 메모리가 부족한 경우 더 많은 것을 넣을 수 있도록 보안을 약화시키는 대신 코드를 개선하거나 기능을 제거하여 공간을 줄이는 방법을 찾으십시오.

타임 스탬프 :

더보기 노출 된 보안