Найти в Дзене
Хакеры на Изнанку

Как обнаружить скрытые камеры?

Многие задаются вопросом, возможно ли обнаружить скрытые камеры? (CCTV, DVR, NVR, ANPR, Dome Camera, IP камеры, нательные камеры). В этой статье мы разберёмся с этим, погнали.
Как обнаружить скрытую камеру?
Если камера использует Wi-Fi, то её MAC адрес виден всем. Если сопоставить этот MAC с базой данных производителей камер, то можно выявить эту камеру.
Если камера не использует Wi-Fi, но
Оглавление

Многие задаются вопросом, возможно ли обнаружить скрытые камеры? (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

-2

Всего найден 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 адрес и название производителей для всех потенциальных камер. Если скрипт ничего не показал, значит ничего не нашлось.

-3

Помните, что некоторые вендоры производят не только камеры наблюдения, но и разнообразную другую электронику (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 делает как тепловизоры, так и разные устройства считывания штрихкодов и т. п. — это может быть любым из этих устройств, т. к. это ТД магазина.

-4

Wistron Neweb Corporation делает разную электронику, в том числе Security IP Camera.

-5

Вместо подключения по 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-адресами производителей камер наблюдения, то они будут показаны.

-6

Если ничего не показано, значит ничего не найдено.

Если будет найдена хотя бы одна камера, то будет запущено ещё одно сканирование 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 я уже добавляю несколько вендоров. Я нашёл их следующим образом:

  1. Сделал захват данных в местах, где видны камеры (магазины, банки и т.п.)
  2. После этого проанализировал вывод скрипта findcameras.sh, изучая производителей устройств, выбирая те из них, которые совершенно незнакомые.
  3. Гуглил фразы вида «НАЙДЕННЫЙ ВЕНДОР CCTV», «НАЙДЕННЫЙ ВЕНДОР CAMERA» и т. п. Удобно, кстати, гуглить по картинкам. Если находятся камеры данного производителя, значит добавляем к известным вендорам производителей камер наблюдения. Производители, в названии которых встречаются слова «mobile», «communications» и «link» это обычно мобильные телефоны и сетевые карты. Понятное дело, что гуглить надо клиентов, а не Точки Доступа.