Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
skylift — ESP8266을 이용한 WiFi 지리적 위치 스푸핑 | Kitploit
도구/GitHubGitHub/awesome-pentest-gadgets/skylift
Embedded Systems SecurityWi-Fi AuditingExploitationWireless SecurityHardware & IoT SecurityRed Teaming
GitHubawesome-pentest-gadgets/skylift

skylift

ESP8266을 이용한 WiFi 지리적 위치 스푸핑

저장소 보기
8368년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

SkyLift V0.4

6월 15일에 게시될 예정입니다

  • python3
  • click
  • 사용하기 쉬운 CLI 파서 워크플로우
  • 타임스탬프 수정

SkyLift V0.3

SkyLift는 저비용 지리적 위치 스푸핑 장치입니다. 현재 ESP8266을 사용하여 WiFi 비콘 프레임(Beacon Frames)을 브로드캐스트함으로써 WiFi 지리적 위치 서비스의 오랜 기간(2008년) 존재해 온 취약점을 악용합니다.

SkyLift의 이 3번째 프로토타입 버전은 Akademie Schloss Solitude 및 ZKM과의 웹 레지던시 기간 동안 더욱 개발되었습니다. 프로젝트에 대한 인터뷰를 읽어보세요. 또는 아래 지침에 따라 $5 미만으로 직접 제작할 수 있습니다.

업데이트

  • 2017년 5월 13일: 베를린 Gruener Salon에서 열린 John Kiriakou(CIA 내부고발자)의 강연에서 가져온 새 스캔 추가

SkyLift는 원래 2016년 낭트의 Zoo Galerie에서 열린 !Mediengruppe Bitnik의 Assange 룸 "Welcome to Ecuador!" 쇼를 위해 Surya Mattu와 공동으로 개발되었습니다. 이 업데이트 버전(V0.3)의 개발은 2016년 11월에 시작되어 Schloss Solitude의 웹 레지던시 지원을 받아 2017년 5월에 최종 출시되었습니다. 이 버전은 초기 시스템(SkyLift V0.1)에 비해 다음과 같은 여러 가지 개선 사항을 포함합니다:

  • 제작 비용을 $50에서 약 $5로 절감
  • 핵심 기술 설정 시간을 수 시간에서 약 15분으로 단축
  • 사용자 조작 개선(USB 전원만 연결하면 됨)
  • 채널 호핑을 통한 성능 개선
  • 패킷 구조 개선(타임스탬프 간격 바이트 추가)
  • 숨겨진(null) SSID 옵션 "\x00" 추가
  • 사용자 지정 위치 생성을 위한 유틸리티 스크립트 추가
  • 기술을 단일 장치로 통합
  • 표시용 선택적 OLED 추가

원래 SkyLift(V0.1)에 대한 정보는 https://ahprojects.com/notebook/2016/skylift-geolocation/을 참조하세요.

SkyLift는 소비자용 스마트폰 지리적 위치 서비스의 보안 취약점과 창의적 활용 가능성을 연구하는 Adam Harvey가 유지 관리하는 오픈 소스 프로젝트입니다.

완성된 즉시 사용 가능한 장치를 구하려면 https://undisclosed.cc/에서 제 메일링 리스트에 가입하세요.

빠른 시작

  • ESP8266 NodeMCU 12 또는 12E 구매 | eBay (저렴함) 또는 Amazon.com (빠름)
  • git clone https://github.com/adamhrv/skylift/
  • "arduino/skylift_v03_embassy"에서 스케치 "skylift_v03_embassy.ino"를 업로드하세요.
  • 스마트폰의 WiFi 지리적 위치 서비스가 활성화되어 있는지 확인하세요.
  • ESP8266을 휴대폰에서 12m 이내에 배치하세요(혼잡한 WiFi 지역에서는 0.250.5m 이내).
  • 전체 설정 및 문제 해결 방법은 아래를 참조하세요.

설정

필요한 것:

  • Arduino 1.6.12+
  • ESP8266 NodeMCU 12 또는 12E | eBay, Amazon.com, Adafruit Huzzah
  • 프로그래밍용 USB 마이크로 케이블
  • 5V USB 배터리(선택 사항)

OLED 디스플레이 사용 시(선택 사항):

  • OLED 디스플레이 | eBay, Amazon.com
  • PCB 3x7cm(OLED 디스플레이 사용 시에만) | Amazon.com
  • 납땜 인두
  • OLED 라이브러리 Adafruit_SSD1306 라이브러리
  • ESP8266 라이브러리: "http://arduino.esp8266.com/stable/package_esp8266com_index.json"
  • 납땜 후 헤더를 다듬기 위한 와이어 커터

OLED 디스플레이와 ESP8266 NodeMCU는 모두 배송을 1~2주 기다릴 의향이 있다면 eBay에서 약 절반 가격에 구매할 수 있습니다. ESP8266은 최저 $3까지도 가능합니다.

테스트 스크립트

WiFi 테스트

  • 최신 버전의 Arduino를 사용하고 있는지 확인하세요(빌드에는 1.6.12가 사용됨).
  • ESP8266 보드가 설치되어 있는지 확인하세요. 환경설정(Preferences) > 추가 보드(Additional Boards)에서 "http://arduino.esp8266.com/stable/package_esp8266com_index.json"을 추가하세요.
  • 도구(Tools) > 보드(Board)에서 "NodeMCU 0.9 (ESP12 Module)" 또는 12E를 선택하세요.
  • Arduino/test_single_beacon_frame 스케치로 테스트하세요.
  • WiFi 네트워크를 확인하세요. Network1이라는 이름이 채널 1에서 보여야 합니다.

OLED 화면 테스트

  • PCB 뒷면에서 OLED를 ESP8266에 배선하세요.
  • 낮은 프로파일을 위해 헤더의 검은 플라스틱을 제거하세요.
  • ESP8266 핀 D2를 OLED 핀 SDA에 연결하세요.
  • ESP8266 핀 D3를 OLED 핀 SCL에 연결하세요.
  • PWR(3.3V)에 연결하세요.
  • GND에 연결하세요.
  • Arduino/test_oled_screen 스케치를 업로드하세요.
  • "Scrolling Text Demo 123 456" 텍스트가 화면에 스크롤되어 나타나야 합니다.

에콰도르 대사관

에콰도르 대사관 위치로 SkyLift 테스트하기

  • Arduino/skylift_v03_embassy 스케치를 업로드하세요.
  • 휴대폰에서 WiFi 위치 서비스를 활성화했는지 확인하세요.
  • 활성 데이터 연결이 있는지 확인하세요(셀룰러 또는 WiFi. IP 주소는 중요하지 않음).
  • 선호하는 지도 애플리케이션(또는 위치를 사용하는 모든 앱)을 여세요.
  • 작동하지 않는다면 그 이유는 여러 가지가 있을 수 있습니다. 가장 가능성이 높은 것은 주변에 너무 많은 라우터가 있어서 WiFi 지리적 위치 API가 반환하는 신뢰도 점수(confidence score)를 간섭하기 때문입니다.
  • -60~-40dB의 네트워크가 여러 개 있다면 SkyLift가 새로운 지리적 위치를 반환할 가능성은 낮습니다.

성능 향상을 위한 팁:

  • 주변 WiFi 신호 수를 -80dB 미만의 네트워크 5개 미만으로 줄이세요.
  • 신호 강도가 -80dB 미만이라면 10개 이상의 네트워크에서도 여전히 작동해야 합니다.
  • NetSpot(무료 평가판)을 사용하여 주변 네트워크를 모니터링하고 가능하면 기존 WiFi 라우터에서 멀리 이동하세요.
  • 위성 기반 GPS 신호가 더 강한 창문에서 멀리 이동하세요.
  • 휴대폰이 ESP8266에 가깝게(혼잡한 WiFi 지역에서는 이상적으로 0.11m, 중간 밀도 WiFi 지역에서는 12m, 저밀도 WiFi 지역에서는 최대 10m) 그리고 주변 라우터에서 멀리 떨어져 있는지 확인하세요.
  • 10m 이상의 거리에서는 PCB 트레이스 안테나를 절단하고 SMA 커넥터를 납땜하여 +7dB 안테나나 WiFi 증폭기를 추가하거나, 더 간단하게는 여러 SkyLift 장치를 추가하여 리피터로 사용할 수 있습니다.
  • 금속 지붕과 구조물은 주변 WiFi 신호를 감쇠시킵니다.
  • 석고보드, 목재, 콘크리트는 WiFi를 투과시키므로 신호를 눈에 띄게 감쇠시키지 않습니다.
  • 약 65%가 물로 구성된 사람들은 천연 WiFi 흡수체입니다(2.4GHz는 물의 공진 주파수). 혼잡한 환경에서 주변 WiFi 신호를 약화시켜 혼잡한 지역에서 지리적 위치 스푸핑 성능을 향상시킵니다.
  • 최적의 성능을 위한 권장 장소는 GPS, 셀룰러 및 WiFi 신호가 감소된 벙커, 바 또는 기타 지역입니다. 하지만 어디에서든 자유롭게 실험해 보세요.
  • 지금까지 가장 좋은 결과는 La Gaîté Lyrique의 지하실, 콘서트장, 그리고 (물론) 통제된 테스트 환경에서 얻었습니다.
  • 참고: SkyLift는 보장된 솔루션이 아닙니다. 주변에 경쟁하는 WiFi 신호가 너무 많으면 위치 서비스 API는 낮은 신뢰도 점수를 반환하고 셀룰러 삼각 측량 또는 위성 기반 GPS로 대체됩니다.

다른 WiFi 라우터가 없는 실내에 있는데도 SkyLift가 작동하지 않으면 가능한 한 많은 세부 정보를 포함하여 이슈 보고서를 제출해 주세요:

  • NetSpot 또는 다른 앱의 스캔 결과
  • ESP8266에서 사용하는 채널
  • SkyLift에서 스마트폰까지의 거리
  • 휴대폰에 활성 데이터 연결이 있는지 여부
  • 사용 가능한 데이터 연결(LTE, 4G, 3G, EDGE, GPRS)
  • iOS 또는 Android 여부와, 괜찮으시다면 휴대폰 모델

사용자 지정 위치

iOS, OSX 또는 Wigle.net API를 사용하여 나만의 SkyLift 위치 데이터를 만들 수 있습니다. (Android 및 Linux 프로세스는 아직 문서화되지 않음).

1A) OSX에서 WiFi 네트워크 스캔

python utils/osx_scan_to_json.py -o data/json/my_osx_scan.json

1B) iOS에서 WiFi 네트워크 스캔

무료 AirPort Utility 앱을 사용하고 설정(Settings) > AirPort Utility에서 "Wi-Fi 스캐너"를 활성화하세요. WiFi 스캔을 수행하고 동기화된 메모(Notes)에 저장하거나 자신에게 이메일로 보내세요. CSV 데이터 앞에 2줄이 있어야 합니다. 예:

root@kitploit:~
# Make your notes or add title her (saved as your_scan.txt))
SSID, BSS, RSSI, Channel, Time
"", "11:11:11:11:11:11", "-61", "44", "13:17:34"
"", "11:11:11:11:11:11", "-61", "44", "13:17:44"
"freewificonnect", "22:22:22:22:22:22", "-80", "11", "13:17:32"
"freewificonnect", "22:22:22:22:22:22", "-80", "11", "13:17:41"

파일을 "data/ios/your_scan.txt"에 저장한 후 다음을 실행하세요:

python utils/ios_to_json.py -i data/ios/your_scan.txt -o data/json/your_scan.json

1C) Wigle API 사용

API 키와 API 토큰을 얻으려면 https://wigle.net에 등록하세요(현재 무료). Wigle의 결과는 다양하거나 작동하지 않을 수 있습니다. 그들의 데이터는 크라우드소싱되어 검증되지 않았거나 오래되었을 수 있습니다. 최상의 결과를 얻으려면 현장에서 직접 WiFi 스캔을 만드세요.

python utils/wigle_to_json.py --lat 37.484581 --lon -122.147921 --radius 3 -o data/json/wigle_test.json

2) iOS(csv)를 JSON으로 변환

python utils/ios_to_json.py -i data/ios/your_scan.txt -o data/json/your_scan.json

3) (임의의) JSON을 Arduino 스케치용으로 변환

python utils/json_to_arduino.py -i data/ios/your_scan.json -o data/ino/your_scan.txt

출력 텍스트는 다음과 비슷할 것입니다:

root@kitploit:~
#define nn 2

char* ssids_str[nn] = {
	"74:46:A0:33:00:01",
	"74:46:A0:33:00:02"
};

byte bssids[nn][6] = {
	{0x74, 0x46, 0xA0, 0x33, 0x00, 0x12},
	{0x74, 0x46, 0xA0, 0x33, 0x00, 0x12}
};

char* ssids[nn] = {
	"wifi_ssid",
	"another_wifi_ssid"
};

#ifdef USE_SCREEN
byte channels[nn] = {6, 6};
#else
byte channels[nn] = {10, 11};
#endif


그런 다음 "skylift_v03_embassy"의 사본을 만들고 기존 WiFi 데이터를 사용자 지정 데이터로 교체하세요.

실험: 채널에 대한 두 가지 옵션을 확인하세요. 스케치를 독립 실행 모드(화면 없이)로 사용하는 경우 채널을 변경하고 싶을 수 있습니다. 넓은 방에서 SkyLift를 사용할 때는 무작위 채널의 여러 리피터 유닛과 채널 1, 6, 11의 화면 버전을 함께 사용하는 것이 더 잘 작동하는 것 같습니다. 단일 장치만 사용하는 경우 채널 1, 6, 11을 모두 함께 사용하는 것이 지금까지 가장 좋은 결과를 제공했습니다.


WiFi 지리적 위치 서비스에 관하여

*지리적 위치 서비스(Geolocation Services)*는 스마트폰의 지리적 위치를 결정하는 데 사용되는 기술 모음을 가리키는 광범위한 용어입니다. 지리적 위치 서비스에 사용되는 4가지 주요 기술은 (1) GPS, (2) 셀룰러 삼각 측량, (3) Bluetooth, (4) WiFi 포지셔닝입니다. 이 4가지 신호 중 어떤 것이 사용 가능한지에 따라 스마트폰은 가장 높은 정확도와 가장 짧은 대기 시간으로 지리적 위치를 결정하려고 시도합니다.

SkyLift는 2008년 ETH 취리히의 스위스 연구원 Srdjan Capkun이 처음 발견한 WiFi 지리적 위치 서비스의 *익스플로잇(exploit)*을 활용합니다. 2008년의 조기 경고에도 불구하고 모든 주요 스마트폰 회사는 WiFi를 핵심 지리적 위치 기술로 계속 통합했습니다. 이 취약점은 2012년 Bengt Sjölen과 Gordan Savicic가 그들의 2012년 프로젝트 Packetbridge(<- 훌륭한 문서)에서 창의적으로 악용했을 때에도 여전히 존재했습니다.

이 취약점은 다루기 어렵습니다. WiFi 지리적 위치 회사들이 집 안의 라우터를 포함한 모든 사람의 WiFi 라우터가 자신들의 상업용 지리적 위치 제품의 일부라고 가정하기 때문입니다. 이것이 합법적인지 윤리적인지 여부는 더 공개적으로 논의되어야 합니다.

확실하고 2008년에 이미 입증된 것은 스마트폰 지리적 위치 데이터가 쉽게 위조될 수 있으므로 신뢰해서는 안 된다는 것입니다. 그런데도 우리는 점점 더 많은 중요한 애플리케이션에서 이 기술에 의존하고 있습니다. 예를 들어, 아래 이미지는 제가 Apple의 나의 iPhone 찾기(Find my Phone) 서비스를 속여 제 기기가 런던의 에콰도르 대사관에 있는 것으로 인식하게 하는 것이 얼마나 쉬운지 보여줍니다. (기기는 실제로 베를린에 있었으며, 데스크톱 또는 모바일 기기에서 작동).

Find my Phone at Ecuadorian Embassy

추가 자료

  • Beacon Frame Overview
  • Beacon Frame Packet에 대한 더 자세한 설명
  • Hackaday의 WiFi 지리적 위치 서비스 스푸핑
  • 지리적 위치를 신뢰하지 마세요
  • 표적형 Wi-Fi 지리적 위치 스푸핑을 이용한 기기-신원 연결 공격
  • MDK3 + Raspberry Pi 사용에 관한 SkyLift V0.1 게시물

면책 조항

  • Pokémon 플레이어 및 기타 사용자는 본인의 책임 하에 사용하세요.
  • 현재 연구 및 예술적 목적으로만 사용할 수 있습니다.
  • 사용 전에 현지 WiFi 규정을 확인하세요.
  • 지속적인 브로드캐스트 시간이 지나면 BSSID가 블랙리스트에 등재되거나 다른 위치와 연관될 수 있습니다(FACT Liverpool에서 발생한 사례). 이로 인해 다른 사용자에게 위치가 노출되거나 버뮤다 삼각지대(Bermuda Triangle) 효과를 위해 창의적으로 사용될 수 있습니다.
  • SkyLift는 GPS 스푸핑 장치가 아닙니다. 1.5GHz GPS 스푸핑에 대해서는 저비용 TX SDR로 GPS 위치 스푸핑하기 또는 소프트웨어 정의 GPS 신호 시뮬레이터를 참조하세요.
  • SkyLift는 현재 2.4GHz 전용 장치입니다.
  • SkyLift는 보장된 솔루션이 아닙니다

전시회에서의 SkyLift:

  • Dark Technology Dark Web. Spektrum. 베를린. 2017.
  • How Much of this is Fiction. FACT. 리버풀. 2017.
  • Lanceurs d'alerte . La Gaîté Lyrique. 파리. 2017.
  • *Welcome to Ecuador. Zoo Galerie. 2016.

SkyLift 크레딧:

  • 원래 콘셉트는 !Mediengruppe Bitnik (DE)와 공동 개발
  • SkyLift V0.1은 Surya Mattu (US)와 공동 개발
  • Julian Oliver (DE)의 기술 자문
  • 연구 지원 및 Python 개발 기여: Leon Eckert (US/DE)
  • Zoo Galerie를 위해 Aude Launay가 큐레이팅한 "Welcome to Ecuador" 설치 작품(2016)
  • ESP8266 개념 증명 비콘 프레임 코드: https://github.com/kripthor/WiFiBeaconJam
  • Schloss Solitude 웹 레지던시
도구 다운로드