IoTSearch使用教程#

软件介绍#

IoTSearch是一款专业的物联网设备搜索引擎,专为安全研究人员和网络管理员设计。它能够通过Shodan、Censys等搜索引擎快速发现网络中的物联网设备,并提供详细的设备信息,为物联网设备管理和安全评估提供重要支持。

主要功能#

  • 多搜索引擎支持(Shodan、Censys、ZoomEye等)
  • 物联网设备快速发现
  • 设备类型识别和分类
  • 设备漏洞信息查询
  • 地理位置信息查询
  • 批量设备搜索
  • 设备信息导出
  • 自定义搜索查询
  • 设备监控和告警
  • API集成支持

适用场景#

  • 物联网设备发现和管理
  • 物联网安全评估
  • 网络安全研究
  • 设备资产盘点
  • 安全漏洞扫描
  • 设备合规性检查
  • 威胁情报收集

入门级使用#

安装IoTSearch#

IoTSearch是一个Python工具,可以通过以下步骤安装:

# 克隆仓库
git clone https://github.com/iotsearch/iotsearch.git

# 进入目录
cd iotsearch

# 安装依赖
pip install -r requirements.txt

# 安装IoTSearch
python setup.py install

配置API密钥#

配置搜索引擎的API密钥:

# 创建配置文件
# config.yaml内容:

shodan:
  api_key: "YOUR_SHODAN_API_KEY"

censys:
  api_id: "YOUR_CENSYS_API_ID"
  api_secret: "YOUR_CENSYS_API_SECRET"

zoomeye:
  username: "YOUR_ZOOMEYE_USERNAME"
  password: "YOUR_ZOOMEYE_PASSWORD"

基本设备搜索#

使用IoTSearch进行基本的物联网设备搜索:

# 基本设备搜索
iotsearch search "webcam"

# 搜索特定类型的设备
iotsearch search "router"

# 搜索特定国家的设备
iotsearch search "webcam country:CN"

初级使用#

使用特定搜索引擎#

使用特定的搜索引擎进行搜索:

# 使用Shodan搜索
iotsearch search "webcam" --engine shodan

# 使用Censys搜索
iotsearch search "webcam" --engine censys

# 使用ZoomEye搜索
iotsearch search "webcam" --engine zoomeye

设备类型过滤#

根据设备类型进行过滤:

# 搜索摄像头设备
iotsearch search "webcam" --device-type camera

# 搜索路由器设备
iotsearch search "router" --device-type router

# 搜索智能灯泡
iotsearch search "light" --device-type light

地理位置过滤#

根据地理位置进行过滤:

# 搜索特定国家的设备
iotsearch search "webcam" --country CN

# 搜索特定城市的设备
iotsearch search "webcam" --city Beijing

# 搜索特定IP范围的设备
iotsearch search "webcam" --ip-range 192.168.1.0/24

中级使用#

批量设备搜索#

批量搜索多个设备类型:

# 创建搜索列表
# searches.txt内容:
# webcam
# router
# light
# thermostat

# 批量搜索
iotsearch batch --input searches.txt --output results/

设备信息查询#

查询特定设备的详细信息:

# 查询特定IP的设备信息
iotsearch info 192.168.1.100

# 查询设备的漏洞信息
iotsearch vulnerabilities 192.168.1.100

# 查询设备的历史信息
iotsearch history 192.168.1.100

结果导出#

将搜索结果导出为不同格式:

# 导出为JSON格式
iotsearch search "webcam" --output json --outfile results.json

# 导出为CSV格式
iotsearch search "webcam" --output csv --outfile results.csv

# 导出为HTML报告
iotsearch search "webcam" --output html --outfile results.html

中上级使用#

自定义搜索查询#

使用自定义的搜索查询:

# 自定义搜索查询
iotsearch search 'port:8080 product:"Apache"'

# 组合多个搜索条件
iotsearch search 'webcam country:CN port:80'

# 使用正则表达式
iotsearch search 'hostname:.*camera.*'

设备监控#

监控特定设备的在线状态:

# 添加监控设备
iotsearch monitor add 192.168.1.100

# 查看监控状态
iotsearch monitor list

# 启动监控服务
iotsearch monitor start

# 查看监控结果
iotsearch monitor results

设备风险评估#

评估物联网设备的安全风险:

# 评估设备风险
iotsearch assess 192.168.1.100

# 批量风险评估
iotsearch assess --input devices.txt --output assessment.json

# 生成风险报告
iotsearch report --risk --output risk_report.html

高级使用#

API集成#

将IoTSearch集成到其他应用中:

# API集成示例
from iotsearch import IoTSearch

# 初始化客户端
client = IoTSearch(api_key='YOUR_API_KEY')

# 搜索设备
results = client.search('webcam country:CN')

# 查询设备信息
device_info = client.get_device_info('192.168.1.100')

# 查询漏洞信息
vulnerabilities = client.get_vulnerabilities('192.168.1.100')

print(f"Found {len(results)} devices")
print(f"Device info: {device_info}")
print(f"Vulnerabilities: {vulnerabilities}")

自动化脚本#

创建自动化脚本进行设备搜索和分析:

# 自动化脚本示例
import json
from iotsearch import IoTSearch

def scan_network(ip_range):
    client = IoTSearch(api_key='YOUR_API_KEY')
    
    # 搜索IP范围内的设备
    query = f"net:{ip_range}"
    results = client.search(query)
    
    # 分析设备
    devices = []
    for device in results:
        device_info = client.get_device_info(device['ip_str'])
        vulnerabilities = client.get_vulnerabilities(device['ip_str'])
        
        devices.append({
            'ip': device['ip_str'],
            'info': device_info,
            'vulnerabilities': vulnerabilities
        })
    
    return devices

# 使用示例
devices = scan_network('192.168.1.0/24')

# 保存结果
with open('devices.json', 'w') as f:
    json.dump(devices, f, indent=2)

print(f"Found {len(devices)} devices")

大规模设备分析#

进行大规模物联网设备分析:

# 大规模分析脚本
import multiprocessing
from iotsearch import IoTSearch

def analyze_device(device_ip):
    client = IoTSearch(api_key='YOUR_API_KEY')
    
    try:
        device_info = client.get_device_info(device_ip)
        vulnerabilities = client.get_vulnerabilities(device_ip)
        
        return {
            'ip': device_ip,
            'info': device_info,
            'vulnerabilities': vulnerabilities
        }
    except Exception as e:
        return {
            'ip': device_ip,
            'error': str(e)
        }

def batch_analyze(device_ips, processes=10):
    with multiprocessing.Pool(processes=processes) as pool:
        results = pool.map(analyze_device, device_ips)
    
    return results

# 使用示例
device_ips = open('devices.txt').read().splitlines()
results = batch_analyze(device_ips, processes=20)

# 统计结果
total_devices = len(results)
vulnerable_devices = len([r for r in results if r.get('vulnerabilities')])

print(f"Analyzed {total_devices} devices")
print(f"Found {vulnerable_devices} vulnerable devices")

大师级使用#

物联网威胁情报#

收集和分析物联网相关的威胁情报:

# 威胁情报收集脚本
from iotsearch import IoTSearch
import json
from datetime import datetime

class IoTThreatIntel:
    def __init__(self, api_key):
        self.client = IoTSearch(api_key=api_key)
        self.threats = []
    
    def collect_threats(self, query, limit=100):
        results = self.client.search(query, limit=limit)
        
        for device in results:
            # 分析设备漏洞
            vulnerabilities = self.client.get_vulnerabilities(device['ip_str'])
            
            # 识别威胁
            if vulnerabilities:
                threat = {
                    'ip': device['ip_str'],
                    'device_type': device.get('device_type', 'unknown'),
                    'vulnerabilities': vulnerabilities,
                    'timestamp': datetime.now().isoformat()
                }
                
                self.threats.append(threat)
        
        return self.threats
    
    def analyze_threats(self):
        analysis = {
            'total_threats': len(self.threats),
            'vulnerable_devices': [],
            'common_vulnerabilities': {},
            'geographic_distribution': {}
        }
        
        # 分析漏洞设备
        for threat in self.threats:
            if threat['vulnerabilities']:
                analysis['vulnerable_devices'].append(threat['ip'])
                
                # 统计常见漏洞
                for vuln in threat['vulnerabilities']:
                    vuln_id = vuln.get('id', 'unknown')
                    analysis['common_vulnerabilities'][vuln_id] = \
                        analysis['common_vulnerabilities'].get(vuln_id, 0) + 1
        
        return analysis
    
    def generate_report(self, output_file):
        analysis = self.analyze_threats()
        
        report = {
            'summary': analysis,
            'threats': self.threats,
            'generated_at': datetime.now().isoformat()
        }
        
        with open(output_file, 'w') as f:
            json.dump(report, f, indent=2)
        
        return report

# 使用示例
threat_intel = IoTThreatIntel(api_key='YOUR_API_KEY')
threat_intel.collect_threats('webcam country:CN', limit=100)
report = threat_intel.generate_report('threat_report.json')

print(f"Collected {len(threat_intel.threats)} threats")
print(f"Found {report['summary']['total_threats']} total threats")

企业级物联网监控系统#

构建企业级的物联网设备监控系统:

# 企业级监控系统
import time
import json
from datetime import datetime
from iotsearch import IoTSearch

class IoTMonitoringSystem:
    def __init__(self, config_file):
        self.config = self.load_config(config_file)
        self.client = IoTSearch(api_key=self.config['api_key'])
        self.monitored_devices = {}
        self.alerts = []
    
    def load_config(self, config_file):
        with open(config_file, 'r') as f:
            return json.load(f)
    
    def add_device(self, device_ip, device_name):
        self.monitored_devices[device_ip] = {
            'name': device_name,
            'last_scan': None,
            'status': 'unknown',
            'vulnerabilities': []
        }
    
    def scan_devices(self):
        for device_ip in self.monitored_devices:
            try:
                # 获取设备信息
                device_info = self.client.get_device_info(device_ip)
                vulnerabilities = self.client.get_vulnerabilities(device_ip)
                
                # 更新设备状态
                self.monitored_devices[device_ip]['last_scan'] = datetime.now().isoformat()
                self.monitored_devices[device_ip]['status'] = 'online'
                self.monitored_devices[device_ip]['vulnerabilities'] = vulnerabilities
                
                # 检查告警条件
                if vulnerabilities:
                    self.send_alert(device_ip, vulnerabilities)
                
            except Exception as e:
                self.monitored_devices[device_ip]['status'] = 'offline'
                self.monitored_devices[device_ip]['error'] = str(e)
    
    def send_alert(self, device_ip, vulnerabilities):
        alert = {
            'device_ip': device_ip,
            'device_name': self.monitored_devices[device_ip]['name'],
            'vulnerabilities': vulnerabilities,
            'timestamp': datetime.now().isoformat()
        }
        
        self.alerts.append(alert)
        
        # 发送通知
        print(f"ALERT: Device {device_ip} has {len(vulnerabilities)} vulnerabilities")
        
        # 可以集成邮件、短信等通知方式
    
    def generate_report(self, output_file):
        report = {
            'summary': {
                'total_devices': len(self.monitored_devices),
                'online_devices': len([d for d in self.monitored_devices.values() if d['status'] == 'online']),
                'vulnerable_devices': len([d for d in self.monitored_devices.values() if d['vulnerabilities']]),
                'total_alerts': len(self.alerts)
            },
            'devices': self.monitored_devices,
            'alerts': self.alerts,
            'generated_at': datetime.now().isoformat()
        }
        
        with open(output_file, 'w') as f:
            json.dump(report, f, indent=2)
        
        return report
    
    def monitor(self, interval=3600):
        while True:
            self.scan_devices()
            time.sleep(interval)

# 使用示例
# config.json内容:
# {
#     "api_key": "YOUR_API_KEY",
#     "devices": [
#         {"ip": "192.168.1.100", "name": "Camera-1"},
#         {"ip": "192.168.1.101", "name": "Camera-2"}
#     ]
# }

system = IoTMonitoringSystem('config.json')

# 添加设备
for device in system.config['devices']:
    system.add_device(device['ip'], device['name'])

# 扫描设备
system.scan_devices()

# 生成报告
report = system.generate_report('monitoring_report.json')

print(f"Monitored {report['summary']['total_devices']} devices")
print(f"Online: {report['summary']['online_devices']}")
print(f"Vulnerable: {report['summary']['vulnerable_devices']}")

实战案例#

案例一:企业物联网设备审计#

场景:安全团队需要对企业的物联网设备进行全面审计,发现所有设备并评估其安全状况。

解决方案:使用IoTSearch进行全面设备搜索和安全评估。

实施步骤

  1. 设备发现

    # 搜索企业网络中的物联网设备
    iotsearch search "net:192.168.1.0/24" --output json --outfile devices.json
    
    # 搜索特定类型的设备
    iotsearch search "webcam net:192.168.1.0/24" --output json --outfile webcams.json
    iotsearch search "router net:192.168.1.0/24" --output json --outfile routers.json
  2. 安全评估

    • 分析发现的设备
    • 查询设备漏洞信息
    • 评估设备安全风险
  3. 审计报告

    • 生成设备清单
    • 生成安全评估报告
    • 提供安全加固建议

结果

  • 发现了企业网络中的50多台物联网设备
  • 识别出15台设备存在安全漏洞
  • 发现了3台设备配置不当
  • 提供了详细的物联网设备安全加固建议

案例二:物联网威胁情报收集#

场景:安全研究人员需要收集物联网相关的威胁情报,了解最新的物联网安全威胁。

解决方案:使用IoTSearch收集和分析物联网威胁情报。

实施步骤

  1. 威胁收集

    # 搜索存在漏洞的物联网设备
    iotsearch search "vulnerable:true" --output json --outfile threats.json
    
    # 搜索特定类型的漏洞设备
    iotsearch search "vuln:CVE-2021-XXXX" --output json --outfile cve_threats.json
  2. 威胁分析

    • 分析威胁设备的分布
    • 识别常见的漏洞类型
    • 分析威胁的地理分布
  3. 威胁报告

    • 生成威胁情报报告
    • 提供威胁防护建议
    • 发布威胁预警

结果

  • 收集了1000多个物联网威胁情报
  • 识别出10个常见的物联网漏洞
  • 分析了威胁的地理分布和设备类型
  • 提供了详细的物联网威胁防护建议

案例三:物联网设备监控#

场景:企业需要实时监控其物联网设备的在线状态和安全状况,及时发现异常。

解决方案:使用IoTSearch构建物联网设备监控系统。

实施步骤

  1. 监控设置

    # 创建监控脚本
    # 添加需要监控的设备
    # 配置监控参数
    # 设置告警规则
  2. 实时监控

    • 定期扫描设备状态
    • 检查设备漏洞
    • 监控设备在线状态
  3. 告警通知

    • 配置告警规则
    • 发送告警通知
    • 生成监控报告

结果

  • 监控了企业中的100多台物联网设备
  • 及时发现了5台设备的异常状态
  • 成功处理了3个安全告警
  • 建立了完善的物联网设备监控体系

总结#

IoTSearch是一款功能强大的物联网设备搜索引擎,通过本教程的学习,您已经掌握了从入门到大师级的使用方法。

主要功能回顾#

  • 多搜索引擎:支持Shodan、Censys、ZoomEye等多个搜索引擎
  • 设备发现:快速发现网络中的物联网设备
  • 设备识别:识别设备类型和厂商信息
  • 漏洞查询:查询设备的漏洞信息
  • 批量搜索:支持批量搜索多个设备类型
  • 结果导出:支持多种格式的结果导出
  • API集成:提供API接口,便于集成到其他应用
  • 监控告警:支持设备监控和告警功能

最佳实践#

  1. API密钥保护:妥善保护API密钥,避免泄露
  2. 定期扫描:定期进行设备扫描,及时发现新设备
  3. 结果验证:对搜索结果进行验证,确保准确性
  4. 安全加固:根据扫描结果及时加固设备安全
  5. 监控告警:建立设备监控机制,及时发现异常
  6. 合规使用:确保在法律和授权范围内使用IoTSearch

注意事项#

  1. API限制:搜索引擎的API可能有使用限制,需要注意配额
  2. 网络影响:大规模搜索可能会对网络造成一定影响
  3. 数据准确性:搜索结果可能存在误报,需要进行验证
  4. 隐私保护:搜索结果可能包含敏感信息,需要妥善保护
  5. 法律合规:使用IoTSearch进行搜索时,需要遵守相关法律法规
  6. 道德考量:确保获得目标网络的授权后再进行设备搜索

通过合理使用IoTSearch,您可以有效地发现和分析物联网设备,为物联网安全评估、威胁情报收集和设备管理提供有价值的信息。同时,务必在法律和伦理允许的范围内使用该工具,确保物联网设备搜索的合法性和负责任性。