影刀RPA 异常登录检测:多源IP比对与安全告警
作者:林焱
什么情况用什么
安全团队最怕的事:员工账号被盗了,但两天后才从审计日志里发现。如果能做到"异地IP登录→30秒内告警",损失可以减到最小。
影刀RPA做异常登录检测:从各系统拉登录日志 → 提取登录IP → 和常用IP库比对 → IP异常就触发告警 → 自动锁定账号。
适合场景:
- VPN登录IP异常监控
- OA/ERP系统异地登录检测
- 云控制台异地访问告警
拼多多店群自动化上架方案
- API Key异常调用区域检测
怎么做
第一步:建立常用IP白名单
importjson# 每个员工的常用登录IP和历史IPwhitelist={'zhangsan':{'常用IP':['202.96.xxx.xxx','192.168.x.x'],'常用城市':['深圳','广州'],'常用时间段':['09:00-18:00']},'lisi':{'常用IP':['101.231.xxx.xxx','192.168.x.x'],'常用城市':['上海'],'常用时间段':['08:30-19:00']}}withopen(r'D:\security\ip_whitelist.json','w')asf:json.dump(whitelist,f,ensure_ascii=False)影刀操作:首次需要手动整理员工常用IP,后续自动更新——每次正常登录的IP自动加入白名单。
第二步:实时拉取登录日志
以VPN登录为例。
影刀操作步骤:
1. 【打开网页】登录VPN管理后台 2. 【点击】"登录日志" → "筛选今天" 3. 【获取文本】读取登录记录表格 4. 【执行Python】解析并检测异常importrequests# 也可以直接调API(如果有的话)login_logs=[{'用户名':'zhangsan','时间':'2026-06-28 03:15','IP':'45.33.xxx.xxx'},{'用户名':'lisi','时间':'2026-06-28 09:00','IP':'101.231.xxx.xxx'},{'用户名':'zhangsan','时间':'2026-06-28 09:30','IP':'202.96.xxx.xxx'},]第三步:异常检测逻辑
importrequestsdefget_ip_info(ip):"""查询IP归属地"""# 使用纯真IP库或第三方APIresp=requests.get(f'http://ip-api.com/json/{ip}?lang=zh-CN',timeout=5)returnresp.json()defcheck_login_anomaly(login_log,whitelist):alerts=[]user=login_log['用户名']ip=login_log['IP']user_whitelist=whitelist.get(user,{})trusted_ips=user_whitelist.get('常用IP',[])# 检查1:IP是否在白名单ifipnotintrusted_ips:ip_info=get_ip_info(ip)city=ip_info.get('city','未知')# 检查2:城市是否异常trusted_cities=user_whitelist.get('常用城市',[])ifcitynotintrusted_cities:alerts.append({'级别':'高危','用户':user,'IP':ip,'城市':city,'时间':login_log['时间'],'原因':f'异地登录({city})'})else:alerts.append({'级别':'低危','用户':user,'IP':ip,'城市':city,'时间':login_log['时间'],'原因':'新IP(同城)'})# 检查3:深夜登录login_hour=int(login_log['时间'].split(' ')[1].split(':')[0])normal_hours=user_whitelist.get('常用时间段',[])iflogin_hour<6orlogin_hour>22:alerts.append({'级别':'中危','用户':user,'IP':ip,'原因':f'非工作时间登录({login_log["时间"]})'})returnalerts# 批量检测all_alerts=[]forloginlogin_logs:alerts=check_login_anomaly(log,whitelist)all_alerts.extend(alerts)第四步:分级告警
foralertinall_alerts:ifalert['级别']=='高危':# 立即通知安全团队send_urgent_alert(alert)# 自动锁定账号(调用VPN/AD接口)lock_account(alert['用户'])elifalert['级别']=='中危':[video(video-NiN3jbjM-1784060671135)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)]# 发送提醒给员工本人确认send_verification(alert['用户'],alert)elifalert['级别']=='低危':# 记录日志,不打扰log_to_file(alert)有什么坑
坑1:员工出差被误判
员工出差到外地,IP自然变化,属于正常行为。解决:对接OA的出差/请假系统,出差期间的异地IP不告警。
坑2:VPN/代理导致IP误判
很多公司用VPN办公,所有人的IP都显示为公司VPN出口IP——根本看不出真实位置。检测方案要从"IP归属地"转为"行为分析"(如登录频率、操作模式)。
坑3:IP库准度问题
免费的IP归属地查询准确率可能只有80%,一个北京IP被识别成上海,产生假告警。建议购买商业IP库(如纯真),准确率能到95%以上。
坑4:自动锁定误伤
高危告警自动锁定账号虽然快,但出差在外被锁了没法工作——员工直接打电话投诉。先发确认通知,给15分钟响应窗口,无人确认再锁。
总结:异常登录检测的核心是准确率。宁可漏掉几个低风险事件,也不要误判正常登录为高危——后者对用户体验的伤害大得多。