• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rv54ntjwfm3ug8
V2EX  ›  程序员

有什么能自动通过 HTTPS 连接从权威来源获取当前准确时间转为 NTP 协议的开源服务端吗?或者程序在没有 UAC 权限的情况有办法修改 Windows 时间吗?

  •  
  •   rv54ntjwfm3ug8 · Mar 21, 2022 · 2386 views
    This topic created in 1536 days ago, the information mentioned may be changed or developed.

    今天发现全部网站的两步验证都过不了,检测后发现防火墙 DROP 了全部 UDP 外网出站请求(内网不影响,我无法操作这个防火墙)导致 Windows 时间无法同步,电脑时间已经偏差 2 分钟了,于是自己花 3 分钟时间糊(上 StackOverflow 抄了两段代码拼起来)了一个通过 HTTPS 获取网络时间来更新的程序,发现没有 UAC 权限无法更新 Windows 时间。试了下在 UI 手动改系统时间不需要 UAC 权限呀。如果为此把它做成服务 /计划任务(开启 UAC 的情况下要求 UAC 的程序不能作为普通自启项)感觉攻击面增加了。程序在没有 UAC 权限的情况有办法修改 Windows 时间吗?

    18 replies    2022-03-23 07:36:50 +08:00
    cz5424
        1
    cz5424  
       Mar 21, 2022 via iPhone
    人工修改不需要 uac 的话,模拟鼠标就可以了
    i0error
        2
    i0error  
       Mar 21, 2022 via Android
    但是模拟鼠标会不会需要 uac 。。。
    rv54ntjwfm3ug8
        3
    rv54ntjwfm3ug8  
    OP
       Mar 21, 2022 via iPhone
    @cz5424 那就做不到无感同步了
    ysc3839
        4
    ysc3839  
       Mar 21, 2022
    > 在 UI 手动改系统时间不需要 UAC 权限

    是需要的,这是 UAC 没有开到最高档,白名单直接授权了,在这种情况下有一大堆方法可以提权,做成服务不会增加攻击面。
    另外根据微软员工在博客里的说法,UAC 不是安全特性。
    https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
    https://web.archive.org/web/20190315174844/https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
    https://web.archive.org/web/20111216020913/http://channel9.msdn.com/Forums/Coffeehouse/473037-UAC-controversy-the-last-episode/773c9d79f8df4fa8bc489deb00e05c3d
    mingl0280
        5
    mingl0280  
       Mar 21, 2022 via Android
    你可以在内网开个虚拟机,装啥系统随你……然后把内网的时间服务器指定为这台虚拟机。你的虚拟机就随便怎么草 https 服务了吧……
    Tabjy
        6
    Tabjy  
       Mar 21, 2022
    @mingl0280 思路不错 但是在本地跑一个后端是 HTTP 同步的 NTP 服务器貌似更省事
    msg7086
        7
    msg7086  
       Mar 21, 2022
    https://github.com/twekkel/htpdate 你是重写了这个轮子吗。
    yin1999
        8
    yin1999  
       Mar 21, 2022 via Android
    试试内网网关是否自带 NTP 服务器,如果有且时间相对正确的话,可以用那个
    datocp
        9
    datocp  
       Mar 21, 2022 via Android
    用 openwrt 网关就没这些事了。
    直接 dnsmasq 指定 time.windows.com 为网关 ip 。网关做为 ntp 服务器。
    Services.msc 不知道哪个服务用.cmd 重新启动一下,也有同步时间的效果,适合那些主板电池没电的电脑。
    其它应该有个 net time 命令,通过其它电脑进行同步。
    Tink
        10
    Tink  
    PRO
       Mar 21, 2022 via Android
    我觉得你有这功夫,不如在本地起一个 ntp 服务
    rv54ntjwfm3ug8
        11
    rv54ntjwfm3ug8  
    OP
       Mar 21, 2022
    我的想法就是这个,帖子标题第一句就写了,问题是有没有现成的轮子?不想重复造。
    @mingl0280
    @Tabjy
    @Tink
    aru
        12
    aru  
       Mar 21, 2022
    @theklf4
    ntp + htpdate 就可以了
    3dwelcome
        13
    3dwelcome  
       Mar 21, 2022
    就是发一个 NTP 协议的 UDP 包,给 windows 。

    让 windows 能知道当前的时间,算是很容易的一件事情吧。

    平均也就 30 行代码,估计大家都懒得造轮子了。
    3dwelcome
        14
    3dwelcome  
       Mar 21, 2022
    不对,我发现添加自定义 time ntp 服务器,还是需要先申请 UAC 权限。

    而楼主的最大问题,就是没有 UAC 权限。那直接进入死循环了。

    干脆用代码申请提权吧,修改本地时间又不是见不得人的事情,要求 UAC 权限一点不过分。
    ragnaroks
        15
    ragnaroks  
       Mar 21, 2022
    windows 上自用的话,用 dotnet 起个 worker 模板,写完了直接安装到服务里面。

    这玩意我以前也搞过,找个你认为准确的 http 目标,发一个 head 请求,响应里面就有 GMT 时间,除了被 httpclient 坑了一道以外前后不超过 10 分钟撸完
    ragnaroks
        16
    ragnaroks  
       Mar 21, 2022
    补充:应用程序如果以 LocalSystem 用户运行是不需要经过 UAC 允许的
    mmdsun
        17
    mmdsun  
       Mar 21, 2022 via iPhone
    用计划任务启动就不需要 UAC 了,微软留的。貌似也不打算修复了
    mingl0280
        18
    mingl0280  
       Mar 23, 2022 via Android
    @theklf4 啥方案都不用,WinServer 自带……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   941 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 19:31 · PVG 03:31 · LAX 12:31 · JFK 15:31
    ♥ Do have faith in what you're doing.