Многие задаются вопросом, возможно ли обнаружить скрытые камеры? (CCTV, DVR, NVR, ANPR, Dome Camera, IP камеры, нательные камеры). В этой статье мы разберёмся с этим, погнали.
Как обнаружить скрытую камеру?
Если камера использует Wi-Fi, то её MAC адрес виден всем. Если сопоставить этот MAC с базой данных производителей камер, то можно выявить эту камеру.
Если камера не использует Wi-Fi, но использует проводную сеть, то её можно обнаружить только если есть подключение к этой же сети (например, к сети отеля, аэропорта и т. п.).
Если устройство не использует ни проводную, ни беспроводную сеть, то выявить такое устройство невозможно описанными ниже методами. То есть, к примеру, видеорегистраторы таким способом не найти.
Для Wi-Fi устройств MAC адреса можно собрать с помощью airodump-ng, для устройств в сети, к которой мы подключены, мак адреса можно узнать с помощью Nmap. Но нам нужна база данных производителей скрытых камер, да и камер вообще.
База данных MAC адресов всех скрытых камер
Я не нашёл баз данных MAC адресов производителей камер, кроме небольших списков, составленных энтузиастами. Может быть, для отправной точки это подошло бы, но всё равно не то.
Я нашёл сайт, со списками производителей специализированного оборудования: https://directory.ifsecglobal.com/video-surveillance-code004812.html. Я не знаю, актуальные эти списки или нет, полные или не полные, но они достаточно большие и там есть все производители, упомянутые энтузиастами (а тех, которых нет на сайте, то я их не нашёл и в списке OUI, содержащих MAC адреса всех производителей устройств).
Правильное название производителя легко сопоставить с базой данных MAC, поэтому нам достаточно собрать имена вендоров — это отлично подойдёт для нашей цели — поиск скрытых камер.
Создайте файл vendors.sh:
gedit vendors.sh
Скопируйте в него следующий код:
#!/bin/bash
TMP_FILE='/tmp/vendors.txt'
FILE='vendors.txt'
curl -s 'https://directory.ifsecglobal.com/screens-monitors-code004843.html' | grep -E 'ed-companyName' | grep -E -o '">[^/]+<' | sed 's/<//' | sed 's/">//' > $TMP_FILE
for urlpath in cameras-code004815.html cctv-poles-and-columns-code004816.html cctv-poles-and-columns-code004816.html data-storage-solutions-code009685.html voice-video-integrated-data-systems-code004908.html dvr-code004822.html voice-video-integrated-data-storage-code004941.html nvr-code004827.html 4k-cameras-code009684.html anpr-code004813.html body-worn-cameras-code007865.html hd-quality-cameras-code007866.html low-light-level-camera-systems-code007867.html camera-housings-code004814.html internet-remote-surveillance-code004932.html cctv-monitoring-code004999.html dome-camera-code004821.html ip-cameras-code004823.html security-camera-lenses-code004824.html security-monitors-code004825.html security-screens-code007437.html ptz-camera-code004828.html switches-code004968.html remote-surveillance-code004829.html public-space-surveillance-code005012.html infrared-cameras-code007439.html thermal-imaging-code004833.html ai-machinelearning-code009668.html security-cameras-code007485.html video-surveillance-code007482.html video-surveillance-code004812.html
do
curl -s "https://directory.ifsecglobal.com/$urlpath" | grep -E 'ed-companyName' | grep -E -o '">[^/]+<' | sed 's/<//' | sed 's/">//' >> $TMP_FILE
done
#curl -s '' | grep -E 'ed-companyName' | grep -E -o '">[^/]+<' | sed 's/<//' | sed 's/">//' >> $TMP_FILE
for letter in {A..Z} {2..5} {7..9}
do
curl -s "https://www.ispyconnect.com/sources.aspx?letter=$letter" | grep -E -o 'man\.aspx\?n=[^"]{1,}"' | sed 's/man.aspx?n=//' | sed 's/"//' | while read -r line ; do
grep -E "$line " vendors.txt >> $TMP_FILE
done
done
echo 'Tenda Technology Co., Ltd.' >> $TMP_FILE #https://www.google.com/search?q=Tenda+Technology+CCTV&tbm=isch
echo 'LG Innotek' >> $TMP_FILE #https://www.google.com/search?q=LG+Innotek+CCTV&tbm=isch
echo 'Hand Held Products Inc' >> $TMP_FILE #Handheld Thermal Cameras
echo 'Wistron Neweb Corporation' >> $TMP_FILE #https://www.wnc.com.tw/index.php?action=pro_detail&id=76
echo 'HangZhou KuoHeng Technology Co.,ltd' >> $TMP_FILE #https://www.google.com/search?q=HangZhou+KuoHeng+Technology&tbm=isch
echo 'VCS Video Communication Systems AG' >> $TMP_FILE
echo 'D-Link International' >> $TMP_FILE
echo 'Cisco-Linksys, LLC' >> $TMP_FILE
echo 'ICP Internet Communication Payment AG' >> $TMP_FILE
echo 'China Dragon Technology Limited' >> $TMP_FILE
echo 'SAMSUNG TECHWIN CO.,LTD' >> $TMP_FILE
echo 'Hanwha Techwin Security Vietnam' >> $TMP_FILE
echo 'Beward R&D Co., Ltd.' >> $TMP_FILE
echo 'Lorex Technology Inc.' >> $TMP_FILE
echo 'TP-LINK TECHNOLOGIES CO.,LTD.' >> $TMP_FILE
echo 'ABUS Security-Center GmbH & Co. KG' >> $TMP_FILE
echo 'ACM Systems' >> $TMP_FILE
echo 'Aztech Electronics Pte Ltd' >> $TMP_FILE
echo 'Axium Technologies, Inc.' >> $TMP_FILE
echo 'Ace Axis Limited' >> $TMP_FILE
#echo '' >> $TMP_FILE
echo "Total vendors in the list: "`cat $TMP_FILE | wc -l`
cat $TMP_FILE | sort| uniq > $FILE
echo "Unique vendors in the list: "`cat $FILE | wc -l`
Запускать так:
bash ./vendors.sh
В результате будет создан файл vendors.txt.
Статистика:
Total vendors in the list: 1665
Unique vendors in the list: 680
Всего найден 680 уникальный производитель — это достаточно много. Я не знаю, попали ли сюда «ноунеймы». На AliExpress продаются камеры наблюдения без названия на корпусе, без упоминания производителя в инструкции и без его упоминания на коробке (потому что коробки нет).
Вы также можете просмотреть список vendors.txt и удалить лишние, по вашему мнению, записи. Например, я обратил внимание, что много «срабатываний» вызывает «HUAWEI TECHNOLOGIES CO.,LTD», поскольку эта фирма делает ещё и мобильные телефоны (но камеры наблюдения они тоже делают: https://www.google.com/search?q=HUAWEI+CCTV&tbm=isch).
Сканер скрытых камер Wi-Fi по MAC адресу
Теперь, когда у нас есть база данных производителей скрытых камер, нам нужно собрать MAC адреса в округе.
Чтобы проанализировать файл .csv, нужно, чтобы airodump-ng его создала. Для этого переводим беспроводную карту в режим монитора. Я всегда начинаю со следующих двух команд, чтобы не мешали никакие процессы:
sudo systemctl stop NetworkManager
sudo airmon-ng check kill
После этого перевожу Wi-Fi карту в режим монитора:
sudo ip link set wlan0 down
sudo iw wlan0 set monitor control
sudo ip link set wlan0 up
Теперь запускаем airodump-ng примерно следующей командой:
sudo airodump-ng --berlin 60000 -w /tmp/test wlan0
Если вас также интересует диапазон 5 ГГц и если ваша беспроводная карта его поддерживает, то можно запустить примерно такой командой:
sudo airodump-ng --channel 1-13,36-165 --berlin 60000 -w /tmp/test wlan0
Я сохранил в файл /home/mial/cameras-01.csv, у меня там набралось 1600 строк, в ручную мы его анализировать, конечно же, не будем:
cat /home/mial/cameras-01.csv | wc -l
1600
Сейчас мы воспользуемся скриптом, который просто проверит, есть ли вокруг камеры наблюдения. И если они есть, то можно запустить более тяжёлый скрипт, для анализа, к каким Точкам Доступа они подключены.
Создайте файл fc.sh:
gedit fc.sh
Скопируйте в него следующий код:
#!/bin/bash
if [[ "$1" && -f "$1" ]]; then
FILE="$1"
else
echo 'Укажите .csv файл, который вы хотите проанализировать.';
echo 'Пример запуска:';
echo -e "\tbash fc.sh /tmp/test-01.csv";
exit
fi
while read -r line ; do
newline="$(echo $line | grep -E '([A-Z0-9:]{17})')"
if [ "$newline" ]; then
MAC2=`echo "$newline" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
resultshort="$(grep -i ^$MAC2 ./oui.txt)";
vendor=`echo "$resultshort" | cut -f 3`
#vendor=`echo "$resultshort" | awk -F '\t' '{print $3}'`
if [ "$vendor" ]; then
result3=${vendor%,*}
iscamera=''
iscamera=`cat vendors.txt | grep -i "$result3"`
if [ "$iscamera" ]; then
echo
echo $newline
echo $vendor
echo -e "\t\t\t\033[7mВероятно, это камера или другое устройство слежения\e[0m"
echo
fi
fi
fi
done < <(grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){5} ([A-Z0-9:]{17})|(not associated)' $FILE | awk -F ',' '{print $1}')
Запускать так:
bash ./fc.sh /ПУТЬ/ДО/ФАЙЛА.csv
Если файл, который получен с airodump-ng, расположен по пути /tmp/test-01.csv, тогда моя команда следующая:
bash fc.sh /tmp/test-01.csv
Также нам понадобиться файл с базой данных MAC-адресов и соответствующих им производителей, скачайте его в ту же директорию, где разместили файл fc.sh — скачать этот файл нужно до запуска fc.sh и всех других скриптов из этой статьи:
wget http://standards-oui.ieee.org/oui/oui.txt
Исправляем скаченный файл, поскольку в нём используется разрыв строки DOS/Windows, а это приводит к проблемам, программа grep не смогла бы найти строку, даже если она соответствует шаблону:
dos2unix -i oui.txt
Скрипт, используя базу данных сопоставляющую производителей с выделенными им MAC адресами (oui.txt), определит имя вендоров для каждого собранного MAC-адреса и затем проверит, присутствует ли этот вендор в списке производителей камер наблюдения.
Скрипт покажет MAC адрес и название производителей для всех потенциальных камер. Если скрипт ничего не показал, значит ничего не нашлось.
Помните, что некоторые вендоры производят не только камеры наблюдения, но и разнообразную другую электронику (HUAWEI, Sony, Bosch), поэтому весьма вероятны «ложные срабатывания» — в «камеры наблюдения» могут быть записаны устройства, которые ими не являются (например, мобильные телефоны HUAWEI). То есть если что-то найдено, или даже если скрипт вывел с десяток устройств, это не означает, что это всё камеры. В первую очередь, обратите внимание на производителя — довольно часто, ими оказываются популярные производители телефонов.
Если вы нашли что-то интересное, то можно воспользоваться скриптом, который показывает, к каким Точкам Доступа подключены все устройства.
Создайте файл findcameras.sh:
gedit findcameras.sh
Скопируйте в него следующий код:
#!/bin/bash
if [[ "$1" && -f "$1" ]]; then
FILE="$1"
else
echo 'Укажите .csv файл, который вы хотите проанализировать.';
echo 'Пример запуска:';
echo -e "\tbash findcameras.sh /tmp/test-01.csv";
exit
fi
echo -e "\033[1mВсего точек доступа: \033[0;31m`grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){14}' $FILE | wc -l`\e[0m"
echo -e "\033[1mВсего клиентов: \033[0;31m`grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){5} ([A-Z0-9:]{17})|(not associated)' $FILE | wc -l`\e[0m"
echo -e "\033[1mИз них клиентов без ассоциации: \033[0;31m`grep -E '(not associated)' $FILE | wc -l`\e[0m"
echo -e "\033[0;36m\033[1mИнформация о сетях:\e[0m"
while read -r line ; do
if [ "`echo "$line" | cut -d ',' -f 14`" != " " ]; then
echo -e "\033[1m" `echo -e "$line" | cut -d ',' -f 14` "\e[0m"
else
echo -e " \e[3mне удалось получить имя сети\e[0m"
fi
fullMAC=`echo "$line" | cut -d ',' -f 1`
echo -e "\tMAC-адрес: $fullMAC"
MAC=`echo "$fullMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
result="$(grep -i -A 1 ^$MAC ./oui.txt)";
if [ "$result" ]; then
echo -e "\tПроизводитель: `echo "$result" | cut -f 3`"
else
echo -e "\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
fi
is5ghz=`echo "$line" | cut -d ',' -f 4 | grep -i -E '36|40|44|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140'`
if [ "$is5ghz" ]; then
echo -e "\t\033[0;31mРаботает на 5 ГГц!\e[0m"
fi
printonce="\tИнформация о подключённых клиентах:"
while read -r line2 ; do
clientsMAC=`echo $line2 | grep -E "$fullMAC"`
if [ "$clientsMAC" ]; then
if [ "$printonce" ]; then
echo -e $printonce
printonce=''
fi
echo -e "\t\t\033[0;32m" `echo $clientsMAC | cut -d ',' -f 1` "\e[0m"
MAC2=`echo "$clientsMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";
if [ "$result2" ]; then
echo -e "\t\t\tПроизводитель: `echo "$result2" | cut -f 3`"
ismobile=`echo $result2 | grep -i -E 'Olivetti|Sony|Mobile|Apple|Samsung|HUAWEI|Motorola|TCT|LG|Ragentek|Lenovo|Shenzhen|Intel|Xiaomi|zte|MEIZU'`
warning=`echo $result2 | grep -i -E 'ALFA|Intel'`
if [ "$ismobile" ]; then
echo -e "\t\t\t\033[0;33mВероятно, это мобильное устройство\e[0m"
fi
if [ "$warning" ]; then
echo -e "\t\t\t\033[0;31;5;7mУстройство может поддерживать режим монитора\e[0m"
fi
resultshort="$(grep -i ^$MAC2 ./oui.txt)";
vendor=`echo "$resultshort" | cut -f 3`
if [ "$vendor" ]; then
result3=${vendor%,*}
iscamera=''
iscamera=`cat vendors.txt | grep -i "$result3"`
if [ "$iscamera" ]; then
echo -e "\t\t\t\033[7mВероятно, это камера или другое устройство слежения\e[0m"
fi
fi
else
echo -e "\t\t\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
fi
probed=`echo $line2 | cut -d ',' -f 7`
if [ "`echo $probed | grep -E [A-Za-z0-9_\\-]+`" ]; then
echo -e "\t\t\tИскал сети: $probed"
fi
fi
done < <(grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){5} ([A-Z0-9:]{17})|(not associated)' $FILE)
done < <(grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){14}' $FILE)
echo -e "\033[0;36m\033[1mИнформация о неподключённых клиентах:\e[0m"
while read -r line2 ; do
clientsMAC=`echo $line2 | cut -d ',' -f 1`
echo -e "\033[0;31m" `echo $clientsMAC | cut -d ',' -f 1` "\e[0m"
MAC2=`echo "$clientsMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";
if [ "$result2" ]; then
echo -e "\tПроизводитель: `echo "$result2" | cut -f 3`"
ismobile=`echo $result2 | grep -i -E 'Olivetti|Sony|Mobile|Apple|Samsung|HUAWEI|Motorola|TCT|LG|Ragentek|Lenovo|Shenzhen|Intel|Xiaomi|zte'`
warning=`echo $result2 | grep -i -E 'ALFA|Intel'`
if [ "$ismobile" ]; then
echo -e "\t\033[0;33mВероятно, это мобильное устройство\e[0m"
fi
if [ "$warning" ]; then
echo -e "\t\033[0;31;5;7mУстройство может поддерживать режим монитора\e[0m"
fi
resultshort="$(grep -i ^$MAC2 ./oui.txt)";
vendor=`echo "$resultshort" | cut -f 3`
if [ "$vendor" ]; then
result3=${vendor%,*}
iscamera=''
iscamera=`cat vendors.txt | grep -i "$result3"`
if [ "$iscamera" ]; then
echo -e "\t\t\t\033[7mВероятно, это камера или другое устройство слежения\e[0m"
fi
fi
else
echo -e "\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
fi
probed=`echo $line2 | cut -d ',' -f 7`
if [ "`echo $probed | grep -E [A-Za-z0-9_\\-]+`" ]; then
echo -e "\tИскал сети: $probed"
fi
done < <(grep -E '(not associated)' $FILE)
Запускать так:
bash findcameras.sh /ПУТЬ/ДО/ФАЙЛА.csv
Например:
bash findcameras.sh /tmp/test-01.csv
Если присмотреться, то можно увидеть, что в скрипт wfw.sh добавлена проверка по списку производителей камер наблюдения.
Для этого скрипта, так же как и для предыдущего, требуются оба файла oui.txt и vendors.txt.
Фирма Hand Held Products Inc делает как тепловизоры, так и разные устройства считывания штрихкодов и т. п. — это может быть любым из этих устройств, т. к. это ТД магазина.
Wistron Neweb Corporation делает разную электронику, в том числе Security IP Camera.
Вместо подключения по Wi-Fi, камеры могут использовать проводную сеть — такие камеры не попадут в список.
Поиск камер наблюдения в локальной сети
Этот способ работает только в сетях, где можно получить MAC-адреса других устройств, то есть только в локальных сетях. Сканировать Интернет бесполезно. Примерами локальных сетей, к которым мы часто подключаемся, — это публичные Точки Доступа Wi-Fi в аэропортах, гостиницах, ресторанах, общественном транспорте и т. п.).
Создайте файл fcl.sh:
gedit fcl.sh
Скопируйте в него следующий код:
#!/bin/bash
if [[ "$1" ]]; then
NET="$1"
else
echo 'Укажите подсеть для поиска камер наблюдения';
echo 'Пример запуска:';
echo -e "\tbash ./fcl.sh 192.168.0.0/24";
exit
fi
found=0
while read -r line ; do
newline=$line
if [ "$newline" ]; then
MAC2=`echo "$newline" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
resultshort="$(grep -i ^$MAC2 ./oui.txt)";
vendor=`echo "$resultshort" | cut -f 3`
if [ "$vendor" ]; then
result3=${vendor%,*}
iscamera=''
iscamera=`cat vendors.txt | grep -i "$result3"`
if [ "$iscamera" ]; then
echo
echo $newline
echo $vendor
echo -e "\t\t\t\033[7mВероятно, это камера или другое устройство слежения\e[0m"
echo
found=1
fi
fi
fi
done < <(sudo nmap -n -sn -PR -PS -PA -PU -T5 $NET | grep -E -o '[A-Z0-9:]{17}')
if [ $found -eq 1 ]; then
sudo nmap -A $NET
fi
Запускать так (для Nmap требуются повышенные привилегии):
sudo bash fcl.sh СЕТЬ/МАСКА
Например:
sudo bash ./fcl.sh 192.168.0.0/24
Если будут найдены устройства с MAC-адресами производителей камер наблюдения, то они будут показаны.
Если ничего не показано, значит ничего не найдено.
Если будет найдена хотя бы одна камера, то будет запущено ещё одно сканирование Nmap — более агрессивное, с полным выводом результатов, чтобы вы могли увидеть IP устройства, которое может оказаться камерой, а также с попыткой определения версии ОС и служб — это может помочь с выявлением камеры.
Фрагмент вывода из дополнительного сканирования:
|_http-title: NETSurveillance WEB
554/tcp open rtsp H264DVR rtspd 1.0
|_rtsp-methods: OPTIONS, DESCRIBE, SETUP, TEARDOWN, GET_PARAMETER, SET_PARAMETER, PLAY, PAUSE
8899/tcp open soap gSOAP 2.7
|_http-server-header: gSOAP/2.7
Заголовок NETSurveillance WEB намекает, что это сетевая камера наблюдения. Открытые порты 554 и 8899 принадлежат службам RTSP и ONVIF характерным для IP камер.
Качество сканирования в первую очередь определяется качеством списка производителей камер наблюдения.
Обратите внимание, что в файле vendors.sh я уже добавляю несколько вендоров. Я нашёл их следующим образом:
- Сделал захват данных в местах, где видны камеры (магазины, банки и т.п.)
- После этого проанализировал вывод скрипта findcameras.sh, изучая производителей устройств, выбирая те из них, которые совершенно незнакомые.
- Гуглил фразы вида «НАЙДЕННЫЙ ВЕНДОР CCTV», «НАЙДЕННЫЙ ВЕНДОР CAMERA» и т. п. Удобно, кстати, гуглить по картинкам. Если находятся камеры данного производителя, значит добавляем к известным вендорам производителей камер наблюдения. Производители, в названии которых встречаются слова «mobile», «communications» и «link» это обычно мобильные телефоны и сетевые карты. Понятное дело, что гуглить надо клиентов, а не Точки Доступа.