Jump to content

Angus Robertson

Members
  • Content Count

    2070
  • Joined

  • Last visited

  • Days Won

    38

Posts posted by Angus Robertson


  1. I have seen DNS amplification attacks using my DNS in the past, usually from the size of the firewall logs, but then block it using the external firewall.  Generally I'm not too worried about exploits, no-one has ever successfully attacked my servers. 

     

    I have however moved the DNS for a test domain to Cloudfare, so will add updating it's DNS records to the ICS sample application alongside Windows DNS,  Not sure if I also moved the web site to Cloudfare, the dashboard is very confusing and I don't really care at the moment, need to write code instead.

     

    Angus


  2. My public DNS servers have recursion and caching disabled, they are primary/secondary DNS servers, not used for local DNS.  I believe that avoids the worst abuse, but certainly not an expert.

     

    My experience of the three Let's Encrypt challenge methods is they are all similar speed, The ICS component already does DNS, it tells you what TXT records to set-up manually, I'm just making it easier. 

     

    Now if someone has a Delphi component that handles the various Cloud DNS provides APIs I'd love to use it.  I'm sure it's not complicated, just time consuming to set-up accounts with various providers to test it.

     

    Angus

     


  3. I get the impression from reading the windns.h DNS API documentation that it's mainly for querying and modifying caching DNS servers, rather than updating primary DNS servers, no functions for server setup,  zones, etc, all of which are in the DNS WMI API.  I also need this to work over a LAN, which WMI handles, albeit sluggishly.

     

    Angus


  4. Has anyone looked at automating management of the Windows DNS Server, such as adding and deleting resource records? 

     

    It can be done using the WMI namespace root\MicrosoftDNS, done a couple of quick tests, I just need to add and remove TXT records (for Let's Encrypt challenges), but wonder whether there is a demand for a more versatile component.

     

    Angus


  5. This is a function I've been using for 15 years, including with OpenSSL command lines, not looked at your code to see how they differ, but might be worth trying it.

     

    Angus

     


    procedure GetConsoleOutput (const CommandLine : string;  var Output : TStringList);
    var
      SA: TSecurityAttributes;
      SI: TStartupInfo;
      PI: TProcessInformation;
      StdOutFile, AppProcess, AppThread : THandle;
      RootDir, WorkDir, StdOutFileName:string;
    const
      FUNC_NAME = 'GetConsoleOuput';
    begin
        StdOutFile:=0;
        AppProcess:=0;
        AppThread:=0;
        try

        // Initialize dirs
        RootDir:=ExtractFilePath(ParamStr(0));
        WorkDir:=ExtractFilePath(CommandLine);

        // Check WorkDir
        if not (FileSearch(ExtractFileName(CommandLine),WorkDir)<>'') then
          WorkDir:=RootDir;

        // Initialize output file security attributes
        FillChar(SA,SizeOf(SA),#0);
        SA.nLength:=SizeOf(SA);
        SA.lpSecurityDescriptor:=nil;
        SA.bInheritHandle:=True;

        // Create Output File
        StdOutFileName:=RootDir+'output.tmp';
        StdOutFile:=CreateFile(PChar(StdOutFileName),
                       GENERIC_READ or GENERIC_WRITE,
                       FILE_SHARE_READ or FILE_SHARE_WRITE,
                       @SA,
                       CREATE_ALWAYS, // Always create it
                       FILE_ATTRIBUTE_TEMPORARY or // Will cache in memory
                                                   // if possible
                       FILE_FLAG_WRITE_THROUGH,
                       0);

        // Check Output Handle
        if StdOutFile = INVALID_HANDLE_VALUE then
          raise Exception.CreateFmt('Function %s() failed!' + #10#13 +
            'Command line = %s',[FUNC_NAME,CommandLine]);

        // Initialize Startup Info
        FillChar(SI,SizeOf(SI),#0);
        with SI do begin
          cb:=SizeOf(SI);
          dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
          wShowWindow:=SW_HIDE;
          hStdInput:=GetStdHandle(STD_INPUT_HANDLE);
          hStdError:=StdOutFile;
          hStdOutput:=StdOutFile;
        end;

        // Create the process
        if CreateProcess(nil, PChar(CommandLine), nil, nil,
                         True, 0, nil,
                         PChar(WorkDir), SI, PI) then begin
          WaitForSingleObject(PI.hProcess,INFINITE);
          AppProcess:=PI.hProcess;
          AppThread:=PI.hThread;
          end
        else
          raise Exception.CreateFmt('CreateProcess() in function %s() failed!'
                       + #10#13 + 'Command line = %s',[FUNC_NAME,CommandLine]);

        CloseHandle(StdOutFile);
        StdOutFile:=0;

        Output.Clear;
        Output.LoadFromFile (StdOutFileName);

      finally
        // Close handles
        if StdOutFile <> 0 then CloseHandle(StdOutFile);
        if AppProcess <> 0 then CloseHandle(AppProcess);
        if AppThread <> 0 then CloseHandle(AppThread);

        // Delete Output file
        if FileExists(StdOutFileName) then
          SysUtils.DeleteFile(StdOutFileName);
      end;
    end;

    • Like 1

  6. The chorus certificate is an intermediate, it should be signed by a CA, the main chorus-pro.gouv.fr intermediate is signed by Certigna Services CA which is in the ICS trusted bundle RootCaCertsBundle.pem.

     

    But the failure of all the browsers and ICS to connect is not a certificate issue, it is never sent, it failed before that.  Perhaps using SHA1 ciphers or something else outdated.

     

    Angus

     


  7. I can not reach https://chorus-pro.gouv.fr:5443/ with any of the four browsers on my PC either, so not really surprising that ICS can not reach it, a badly configured site. 

     

    Perhaps it only supports an ancient SSL version no longer supported by anyone?  The certificate is issued by someone that is not a trusted CA, but that is not the main issue.  Their main site is fine, but it uses a different SSL certificate to the site on port 5443. 

     

    Although ICS provides what looks like detailed SSL debug logging, this is virtually useless for SSL protocol investigations since none of the protocol packets are decoded.  Wireshark does such decoding, but I really would not waste your time, just ask the web company what TLS protocols they support and which browsers.

     

    Angus

     


  8. Not sure if Qualys check FTP errors, the logs just show dozens of login attempts with real and anonymous credentials, the fail is when they get access.  Did not actually check any RFCs to see what to do, response 533 was already used for another command not allowed without TLS.

     

    Angus

     


  9. Implicit TCP/IP connections were originally easier to implement since they did not requires changes to the protocol, often done with STunnel or similar for FTP, POP3, NNTP and SMTP.  Once the protocols got updated with the STARTTLS command, some people tried to make the implicit ports obsolete, but this can be dangerous since end users don't always tick the use SSL/TLS box.  

     

    There is new RFC 8314 'Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access' that again recommends implicit ports as being good practice. 

     

    I have penetration testing by Qualys on my public server and they kept failing FTP port 21 for allowing clear text passwords, so I've just updated the ICS FTP server component to return '533 USER requires a secure connection' if the LOGIN command is sent before STARTTLS, and Qualys is now happy again. 

     

    Angus

     

     

     


  10. Depending on your version of Delphi and project options, you may need to copy libcrypto-1_1.dll and libssl-1_1.dll  from the samples directory into whatever directory the DCUs and EXE end up in, perhaps win32\debug or win32\release. 

     

    All ICS SSL applications need access to libcrypto-1_1.dll and libssl-1_1.dll which are the latest versions of OpenSSL. In theory, these can be loaded from a directory in the common path or windows directory, but because there are so many different applications using OpenSSL, you can get lots of old DLL versions on your PC, often not compatible with each other.  So generally it is safest to distribute the OpenSSL DLLs in the same directory as your application, so you have a reliable known version. 

     

    By default, ICS applications will try and load from the local directory first before looking elsewhere, in your case it probably found an old OpenSSL DLL elsewhere on your PC, but was missing the other.  You can force ICS to load the DLLs from a specific directory, to avoid such issues. 

     

    Angus
     

     

     


  11. The server now uses all three protocols, svn, http and https.  The old server did not have https or rather we never set it up. 

     

    I agree the svn protocol on port 3690 is very old, but we always supported it and many people will have scripts expecting to use svn (like me) rather than http, so it's still running. 

     

    Angus

     


  12. Apologies if anyone has been having trouble accessing the ICS SVN over the last week, I've retired the 12 year old VM it was running on and now installed SVN on a new hosted Windows Server 2019, not trivial since I'd forgotten how we set it up all those years ago and I've avoided messing with it so as not to break it.

     

    But SVN is now running on a modern version of Apache supporting SSL and running on ports 80, 443 and 8443 (the old one), so you can access http://svn.overbyte.be/svn/ or https://svn.overbyte.be/svn/ as well as the old URL, or svn://svn.overbyte.be/ which is unchanged.  That last server took a long time to set-up because I thought it was part of Apache but turns out to be a little SvnServe program that had been running for 12 years without me noticing.  SVN is now also available on IPv6, but that is transparent and handled by DNS. 

     

    I believe the Apache SSL configuration is correct, but it also serves svn.magsys.co.uk with a separate certificate and sometimes gets confused about which to send. 

     

    Please shout if SVN does not behave as expected.

     

    Angus

     

    • Like 1
    • Thanks 2
×