Skip to content

Instantly share code, notes, and snippets.

@ioc32
Created December 1, 2019 12:11
Show Gist options
  • Save ioc32/07afba0e9ec8d5d764c021af0e4ba0c0 to your computer and use it in GitHub Desktop.
Save ioc32/07afba0e9ec8d5d764c021af0e4ba0c0 to your computer and use it in GitHub Desktop.

Problem statement

It's your first day at HorribleLegacy, Inc. You've been told to investigate a performance issue within a system written by your predecessor. This sytem has no documentation. All we know is that it relies on the following program running inside a Docker image:

docker run gi11es/interview-exercise /usr/bin/helloworld

Ignoring the amount of time it takes to download the docker image for the first time, running the above command outputs "hello" after a while:

~ $ docker run gi11es/interview-exercise /usr/bin/helloworld
hello

The source code of the helloworld program inside the Docker image is unavailable. Your task is to report as much information as possible about /usr/bin/helloworld

  1. What does this program do, exactly?
  2. Where does it spend its time?
  3. Can it run faster, and if so, how?

Please send your report, or a link to it, to ${employee}@horriblelegacy.org

What does this program do. exactly?

In a nutshell, this program downloads an MD5 digest to a temp input file off an HTTP server in esams, deletes (old) output file and uses hashcat to save the cracked hash to a file and then read its contents and print them to standard output.

The exact hashcat incantation follows:

hashcat -m 0 -a 3 --quiet --increment --potfile-disable --outfile-format 2 /tmp/input ?a?a?a?a?a -o /tmp/output

This is, attempt to crack digest algo MD5 using the brute-force attack mode with a 5-char long mask with increments and disabling the potfile. Output format is plain.

The program is also involved in the venerable duty of carrying over Terry Pratchett's memory by eliciting a X-Clacks-Overhead: GNU Terry Pratchett header from the upstream nginx server.

Where does it spend its time?

When invoked directly, helloworld spends about 20 to 25s to run on my 2011 Mac Mini.

Installing and running the observability tool (strace(1)) adds about 5 extra seconds to each run.

During the observed runs, the program spends most of its time waiting to fetch the hash (4s) and the rest in breaking it, maxing out my cores during execution as it's a CPU-bound task.

Can it run faster, and if so, how?

We can look at performance improvements from the configuration, system, application, network and service dependency's perspective.

Programs that interact with external services (interview-exercise.wmflabs.org in this case) can only be as fast as the services they depend on. In this case, it consistently takes about 4 seconds to fetch the MD5 digest to crack. That's about 16-20% of the runtime. Considering the hash is a tiny, static file served over HTTP and it fits in one single payload, if we fix the remote webservice and make it respond from cache the delay in fetching the file would be almost negligible (TCP handshake plus GET) in comparison.

The cracking speed and efficiency can be increased by making use of advanced features available in the hardware (CPU instructions or GPU cores) via hashcat parameters and the libraries it depends on.

Improving the download of the digest brings the original 20-25s down to 16-21s.

Improving the hashcat run by using OpenCL optimised kernels (adding -O to the lit of hashcat params) brings the original 20-25s down to some 10-15s.

The biggest gains are killing the 4s wait while downloading and fixing the hashcat parameters. Combining both we go from 20-25s down to 6-10s.

Since the task is also heavily CPU-bound, one can also scale-up and run the container in a beefier machine for OpenCL to pick up more cores and/or GPUs (if docker exposes them) to distribute work parallelly.

For digests that take much, much longer to break (e.g longer strings or different algorithms altogether), we can scale-out by making use of the hashcat brain might speed things up by distributing the task between hashcat workers. It also adds complexity and overhead (which needs to be well understood).

If the program is to be run multiple times and the to-be-cracked digests can repeat, removing the --potfile-disable should speed up subsequent runs significantly (according to the documentation) since digests successfully cracked in previous runs would already be available. The best performance gain is to not do any work at all!

Using nice(1) to bump the docker process scheduling priority actually proved detrimental for latency.

Information collected (unordered)

Pull image

iortiz@mini:~$ docker image list
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
gi11es/interview-exercise          latest              1ecf55dff2e4        7 weeks ago         627MB
justwatch/elasticsearch_exporter   1.1.0               93101a724c1f        3 months ago        12.2MB

Container image version

$ docker run 1ecf55dff2e4 sh -c 'uname -a'
Linux 57ff1c39a5ac 4.15.0-70-generic #79-Ubuntu SMP Tue Nov 12 10:36:11 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Dynamic libraries used

$ docker run 1ecf55dff2e4 sh -c 'ldd /usr/bin/helloworld'
    linux-vdso.so.1 (0x00007ffe0a3e3000)
    libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f4c1ffe2000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4c1fc59000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4c1fa41000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4c1f650000)
    libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f4c1f42b000)
    libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f4c1f20e000)
    librtmp.so.1 => /usr/lib/x86_64-linux-gnu/librtmp.so.1 (0x00007f4c1eff2000)
    libpsl.so.5 => /usr/lib/x86_64-linux-gnu/libpsl.so.5 (0x00007f4c1ede4000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f4c1eb7a000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f4c1e702000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f4c1e4b7000)
    libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f4c1e265000)
    liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f4c1e057000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4c1de3a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4c1dc1b000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4c1d87d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4c20464000)
    libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f4c1d4ff000)
    libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f4c1d19a000)
    libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007f4c1cf66000)
    libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007f4c1cd30000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f4c1caaf000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4c1c8ab000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f4c1c5d5000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f4c1c3a3000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f4c1c19f000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f4c1bf94000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f4c1bd79000)
    libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f4c1bb5e000)
    libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007f4c1b91d000)
    libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f4c1b5ee000)
    libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f4c1b3db000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f4c1b1d7000)
    libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007f4c1afce000)
    libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007f4c1ad41000)
    libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007f4c1aa9f000)
    libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007f4c1a869000)
    libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007f4c1a653000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f4c1a44b000)
    libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007f4c1a222000)
    libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007f4c1a013000)
    libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007f4c19dc9000)
    libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f4c19ac0000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f4c19888000)

Inspect image

iortiz@mini:~$ docker inspect 1ecf55dff2e4
[
    {
        "Id": "sha256:1ecf55dff2e4ed7917fcbbddd10068a193e635ef7f901dba3973096fdfa6396e",
        "RepoTags": [
            "gi11es/interview-exercise:latest"
        ],
        "RepoDigests": [
            "gi11es/interview-exercise@sha256:540f3c93a505291d05432a127a88471820c518581e4eef904950822b3e3ddbac"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2019-10-10T15:41:40.3126381Z",
        "Container": "b4dbf5d46a201c7467e1db3d02dd7758e3b316fa668c7385feeaa70bba678de2",
        "ContainerConfig": {
            "Hostname": "b4dbf5d46a20",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "INTEL_OPENCL_URL=http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz",
                "HASHCAT_VERSION=hashcat-5.1.0",
                "HASHCAT_UTILS_VERSION=1.9",
                "HCXTOOLS_VERSION=5.1.4",
                "HCXDUMPTOOL_VERSION=5.1.4"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "gi11es/interview-exercise",
            "Volumes": null,
            "WorkingDir": "/hashcat",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "19.03.2",
        "Author": "",
        "Config": {
            "Hostname": "b4dbf5d46a20",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "INTEL_OPENCL_URL=http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz",
                "HASHCAT_VERSION=hashcat-5.1.0",
                "HASHCAT_UTILS_VERSION=1.9",
                "HCXTOOLS_VERSION=5.1.4",
                "HCXDUMPTOOL_VERSION=5.1.4"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "gi11es/interview-exercise",
            "Volumes": null,
            "WorkingDir": "/hashcat",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 626828683,
        "VirtualSize": 626828683,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/c175832f435340c6b2d6e4839b866f8e9f21436421b393cef351180e5f2bac6f/diff:/var/lib/docker/overlay2/8fc8d1415fcbef144ad206da884df2992a339ecf3bb5507fd6f21d26bdc8a47a/diff:/var/lib/docker/overlay2/ff3f01723ff9b79f8789e02f65c69c807999de1d47f2f1ab7a1efd1e8b89c119/diff:/var/lib/docker/overlay2/fc39ce5baa8460df074ab2474775a7f26e06dd9d394e94d99ec9aedd1ef341bd/diff:/var/lib/docker/overlay2/69678bad9918c25ad49ff8758734495a493433f7a1e13a50d46ed22ae21b553f/diff:/var/lib/docker/overlay2/4030b5e243dfe4f8c13ba327bc549c59a3dffd1714bbecc56d402707353d6a7e/diff:/var/lib/docker/overlay2/d5ad12d1117a1ddde10b73e304e3ff0cdbdb6fe6584a7de387138c85dc7e0a89/diff:/var/lib/docker/overlay2/f9595b221726a3dd5415bc6c0744aceac4b645605525dbac3f1e496dd880b55d/diff:/var/lib/docker/overlay2/e965356f34e90d725f61e0d22f3bf1f511697d21d13c4fb52cb41cd0baa4a106/diff:/var/lib/docker/overlay2/53d09c4ff0ad86de3cf970cca0b2165c7ebd1a1670df9f45754f4965fb0d2225/diff:/var/lib/docker/overlay2/5e8352f3ad95e2af3e29a73ef7ec284ff4d1ecca711e00520269e36cd0574be3/diff:/var/lib/docker/overlay2/7ae4149cad22566de977759c2730a661220a11a4f8799aedcf9426c94ec038d6/diff:/var/lib/docker/overlay2/c06a4e6047b89f8a655b474c13a6bcff1ab317811c69f87b75f80594ffc2b008/diff:/var/lib/docker/overlay2/e2c0c526f046e663979ac4efcc2d7e012ba3069d4d6d744cbe05b03fc1d15e34/diff:/var/lib/docker/overlay2/3594180a3c6723effcecc4c3ef47c2235030e40c61647d4b3437122f70285683/diff:/var/lib/docker/overlay2/0d42c5b2ccb62166f5ca91740d9d4e9be9fd48503e726ee2f8a2f10b34db0512/diff:/var/lib/docker/overlay2/c1118e84f1b5da02ea3b1d29f4409066bd11dfc9a4f653be87fc8c5ee679122d/diff:/var/lib/docker/overlay2/00dae9001266f03f6fe0abec6549f62b661d59f66e176e5f40ab39026f4dca56/diff:/var/lib/docker/overlay2/2ef55f3ccb0540f411a6b1a590cc88756c55a6db6b3d97a4236f428d1969d090/diff:/var/lib/docker/overlay2/36711c14738410c9aeb6b45cd70166ecd6f2051107abe1772bd138bbf3edd735/diff:/var/lib/docker/overlay2/96efc6bfaf688d34f0208c6468b063b991c9970e5390affc3463cdae56406ecc/diff",
                "MergedDir": "/var/lib/docker/overlay2/0d790b7e6bf14d8ede2223b0770eceb82dbba1faf7d753fc25925cb4f9389891/merged",
                "UpperDir": "/var/lib/docker/overlay2/0d790b7e6bf14d8ede2223b0770eceb82dbba1faf7d753fc25925cb4f9389891/diff",
                "WorkDir": "/var/lib/docker/overlay2/0d790b7e6bf14d8ede2223b0770eceb82dbba1faf7d753fc25925cb4f9389891/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9",
                "sha256:e45cfbc98a505924878945fdb23138b8be5d2fbe8836c6a5ab1ac31afd28aa69",
                "sha256:d60e01b37e74f12aa90456c74e161f3a3e7c690b056c2974407c9e1f4c51d25b",
                "sha256:b57c79f4a9f3f7e87b38c17ab61a55428d3391e417acaa5f2f761c0e7e3af409",
                "sha256:75e911320006cf5412fd87f9ad843f1fb753728485a80212659fc32ac037477d",
                "sha256:7eebfa4c48151b61d73dc1f2aa541a205d6959be63dafcf5676b5578579dd4a8",
                "sha256:a1f7075d958a30f623ee6386bc08c444980a3e8229a8d0895e34b4bbef7bb45b",
                "sha256:884f02e02d676e029d7c8bb7422f9441a9908f833ec9f93727ad979c296c39bb",
                "sha256:e57442be09b5b8d74ba4e57086f3cb85c36f8f5f77043ad4efc363b107c2bdad",
                "sha256:fd646fcf185b46ded0225d0229ac4c11963bf53f1371d868b43f0d785a923a02",
                "sha256:908645b57c88fcaaf60c01ebfcabf27ebd831be2eb5e64a03859efb3012b1a0b",
                "sha256:7b045ae515f0607514c0f1ae6bc7877d6fdb8131b946596166407fbf72bb1920",
                "sha256:4e1f842fa7409dcfe3f92b7a05ff4909d3de3040472a6c78835372a6f2b26288",
                "sha256:4ebcf1a4f92c16bbec4309b35bd4da62cd014e92287109526eb83b3f03fe24ba",
                "sha256:7d49e5f09232ec381a20ef0b603a5883e9bf6149403fd6d25527528df345da06",
                "sha256:e7283d51fc42be431f1579953498ddf45fcd5cd8d58cfe5d5d0f3553a1b23690",
                "sha256:9dbde14ab38f23b362fbdbb1ec700bbed6b63bb90299ff1a63a9f817f6f3384a",
                "sha256:56bb321c0fe98e2d596ef6b79a0493d249f9cb9a09eb8293e512052a3ee7aec8",
                "sha256:f02721f14c56c87e54704093af76f42e9be07ec317d6e9a62c6dc0aef23f7a9f",
                "sha256:155b4abb51d740187dc83758e8cb360aeca39a028f45181c983d2fe0b98f0c23",
                "sha256:6ec5522d268bdbe7f538e08f03b3d033068a679e950f6b244db5798088129167",
                "sha256:e29708d2f65aa7202c29833a95a7fdeed48ad2d18e8ebbc94d0ce0229d3396b1"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

Inspect image history

iortiz@mini:~$ docker history --no-trunc --format "{{.CreatedBy}}" 1ecf55dff2e4 | tac
/bin/sh -c #(nop) ADD file:1d7cb45c4e196a6a84319b976b95ce1a9037c40b085e88350c071bf27ff59166 in / 
/bin/sh -c set -xe   && echo '#!/bin/sh' > /usr/sbin/policy-rc.d  && echo 'exit 101' >> /usr/sbin/policy-rc.d  && chmod +x /usr/sbin/policy-rc.d   && dpkg-divert --local --rename --add /sbin/initctl  && cp -a /usr/sbin/policy-rc.d /sbin/initctl  && sed -i 's/^exit.*/exit 0/' /sbin/initctl   && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup   && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean  && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean  && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean   && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages   && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes   && echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests
/bin/sh -c rm -rf /var/lib/apt/lists/*
/bin/sh -c mkdir -p /run/systemd && echo 'docker' > /run/systemd/container
/bin/sh -c #(nop)  CMD ["/bin/bash"]
/bin/sh -c apt-get update && apt-get install -y alien clinfo
/bin/sh -c #(nop)  ENV INTEL_OPENCL_URL=http://registrationcenter-download.intel.com/akdlm/irc_nas/9019/opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz
/bin/sh -c mkdir -p /tmp/opencl-driver-intel
/bin/sh -c #(nop) WORKDIR /tmp/opencl-driver-intel
/bin/sh -c curl -O $INTEL_OPENCL_URL;     tar -xzf $(basename $INTEL_OPENCL_URL);     for i in $(basename $INTEL_OPENCL_URL .tgz)/rpm/*.rpm; do alien --to-deb $i; done;     dpkg -i *.deb;     mkdir -p /etc/OpenCL/vendors;     echo /opt/intel/*/lib64/libintelocl.so > /etc/OpenCL/vendors/intel.icd;     rm -rf *
/bin/sh -c #(nop)  ENV HASHCAT_VERSION=hashcat-5.1.0
/bin/sh -c #(nop)  ENV HASHCAT_UTILS_VERSION=1.9
/bin/sh -c #(nop)  ENV HCXTOOLS_VERSION=5.1.4
/bin/sh -c #(nop)  ENV HCXDUMPTOOL_VERSION=5.1.4
/bin/sh -c apt-get update &&     apt-get install -y wget p7zip make build-essential git libcurl4-openssl-dev libssl-dev zlib1g-dev
/bin/sh -c mkdir /hashcat
/bin/sh -c #(nop) WORKDIR /hashcat
/bin/sh -c wget --no-check-certificate https://hashcat.net/files/${HASHCAT_VERSION}.7z &&     7zr x ${HASHCAT_VERSION}.7z &&     rm ${HASHCAT_VERSION}.7z
/bin/sh -c wget --no-check-certificate https://github.com/hashcat/hashcat-utils/releases/download/v${HASHCAT_UTILS_VERSION}/hashcat-utils-${HASHCAT_UTILS_VERSION}.7z &&     7zr x hashcat-utils-${HASHCAT_UTILS_VERSION}.7z &&     rm hashcat-utils-${HASHCAT_UTILS_VERSION}.7z
/bin/sh -c #(nop) WORKDIR /hashcat
/bin/sh -c wget --no-check-certificate https://github.com/ZerBea/hcxtools/archive/${HCXTOOLS_VERSION}.tar.gz &&     tar xfz ${HCXTOOLS_VERSION}.tar.gz &&     rm ${HCXTOOLS_VERSION}.tar.gz
/bin/sh -c #(nop) WORKDIR /hashcat/hcxtools-5.1.4
/bin/sh -c make install
/bin/sh -c #(nop) WORKDIR /hashcat
/bin/sh -c wget --no-check-certificate https://github.com/ZerBea/hcxdumptool/archive/${HCXDUMPTOOL_VERSION}.tar.gz &&     tar xfz ${HCXDUMPTOOL_VERSION}.tar.gz &&     rm ${HCXDUMPTOOL_VERSION}.tar.gz
/bin/sh -c #(nop) WORKDIR /hashcat/hcxdumptool-5.1.4
/bin/sh -c make install
/bin/sh -c #(nop) WORKDIR /hashcat
/bin/sh -c git clone https://github.com/hashcat/kwprocessor.git
/bin/sh -c #(nop) WORKDIR /hashcat/kwprocessor
/bin/sh -c make
/bin/sh -c #(nop) WORKDIR /hashcat
/bin/sh -c ln -s /hashcat/${HASHCAT_VERSION}/hashcat64.bin /usr/bin/hashcat
/bin/sh -c ln -s /hashcat/hashcat-utils-${HASHCAT_UTILS_VERSION}/bin/cap2hccapx.bin /usr/bin/cap2hccapx
/bin/sh -c ln -s /hashcat/kwprocessor/kwp /usr/bin/kwp
/bin/bash
/bin/bash

The image ships utilities (kwp, cap2hccapx) I have not seen in use during the brief testing.

Network capture (HTTP-only)

$ tshark -r wmf.pcap http
    4   0.104325 62.195.111.116 → 185.15.56.49 HTTP 135 GET / HTTP/1.1 
    6   4.218860 185.15.56.49 → 62.195.111.116 HTTP 279 HTTP/1.1 200 OK 
   14  38.200950 62.195.111.116 → 185.15.56.49 HTTP 135 GET / HTTP/1.1 
   16  42.302845 185.15.56.49 → 62.195.111.116 HTTP 279 HTTP/1.1 200 OK 
   24  74.424344 62.195.111.116 → 185.15.56.49 HTTP 135 GET / HTTP/1.1 
   26  78.537834 185.15.56.49 → 62.195.111.116 HTTP 279 HTTP/1.1 200 OK 

hashcat recognised devices

$ docker run 1ecf55dff2e4 sh -c '/usr/bin/hashcat -I'
hashcat (v5.1.0) starting...

OpenCL Info:

Platform ID #1
  Vendor  : Intel(R) Corporation
  Name    : Intel(R) OpenCL
  Version : OpenCL 1.2 LINUX

  Device ID #1
    Type           : CPU
    Vendor ID      : 8
    Vendor         : Intel(R) Corporation
    Name           : Intel(R) Core(TM) i7-2635QM CPU @ 2.00GHz
    Version        : OpenCL 1.2 (Build 25)
    Processor(s)   : 8
    Clock          : 2000
    Memory         : 1972/7888 MB allocatable
    OpenCL Version : OpenCL C 1.2 
    Driver Version : 1.2.0.25

hashcat warnings

  ATTENTION! Pure (unoptimized) OpenCL kernels selected.
This enables cracking passwords and salts > length 32 but for the price of drastically reduced performance.
If you want to switch to optimized OpenCL kernels, append -O to your commandline.

and

The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework

strace(1) output

$ docker run 1ecf55dff2e4 sh -c 'apt-get install strace -qq; strace /usr/bin/helloworld'
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libunwind8:amd64.
(Reading database ... 20148 files and directories currently installed.)
Preparing to unpack .../libunwind8_1.2.1-8_amd64.deb ...
Unpacking libunwind8:amd64 (1.2.1-8) ...
Selecting previously unselected package strace.
Preparing to unpack .../strace_4.21-1ubuntu1_amd64.deb ...
Unpacking strace (4.21-1ubuntu1) ...
Setting up libunwind8:amd64 (1.2.1-8) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Setting up strace (4.21-1ubuntu1) ...
execve("/usr/bin/helloworld", ["/usr/bin/helloworld"], 0x7ffec77f28b0 /* 9 vars */) = 0
brk(NULL)                               = 0x55c7f527d000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=19402, ...}) = 0
mmap(NULL, 19402, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f374b4ec000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libcurl.so.4", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\304\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=518600, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4ea000
mmap(NULL, 2614664, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374b04b000
mprotect(0x7f374b0c6000, 2097152, PROT_NONE) = 0
mmap(0x7f374b2c6000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7b000) = 0x7f374b2c6000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\303\10\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1594832, ...}) = 0
mmap(NULL, 3702816, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374acc2000
mprotect(0x7f374ae3b000, 2097152, PROT_NONE) = 0
mmap(0x7f374b03b000, 49152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x179000) = 0x7f374b03b000
mmap(0x7f374b047000, 12320, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f374b047000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=96616, ...}) = 0
mmap(NULL, 2192432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374aaaa000
mprotect(0x7f374aac1000, 2093056, PROT_NONE) = 0
mmap(0x7f374acc0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7f374acc0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374a6b9000
mprotect(0x7f374a8a0000, 2097152, PROT_NONE) = 0
mmap(0x7f374aaa0000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f374aaa0000
mmap(0x7f374aaa6000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f374aaa6000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libnghttp2.so.14", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200H\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=153352, ...}) = 0
mmap(NULL, 2248560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374a494000
mprotect(0x7f374a4b7000, 2093056, PROT_NONE) = 0
mmap(0x7f374a6b6000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f374a6b6000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libidn2.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\25\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=116656, ...}) = 0
mmap(NULL, 2211864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374a277000
mprotect(0x7f374a293000, 2093056, PROT_NONE) = 0
mmap(0x7f374a492000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7f374a492000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/librtmp.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200J\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=113584, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4e8000
mmap(NULL, 2208688, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374a05b000
mprotect(0x7f374a076000, 2093056, PROT_NONE) = 0
mmap(0x7f374a275000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7f374a275000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libpsl.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\22\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=55136, ...}) = 0
mmap(NULL, 2150504, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3749e4d000
mprotect(0x7f3749e5a000, 2093056, PROT_NONE) = 0
mmap(0x7f374a059000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc000) = 0x7f374a059000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libssl.so.1.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240w\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=433760, ...}) = 0
mmap(NULL, 2529304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3749be3000
mprotect(0x7f3749c43000, 2097152, PROT_NONE) = 0
mmap(0x7f3749e43000, 40960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x60000) = 0x7f3749e43000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\220\6\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=2575848, ...}) = 0
mmap(NULL, 4685184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374976b000
mprotect(0x7f37499b8000, 2097152, PROT_NONE) = 0
mmap(0x7f3749bb8000, 163840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x24d000) = 0x7f3749bb8000
mmap(0x7f3749be0000, 11648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3749be0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\266\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=305456, ...}) = 0
mmap(NULL, 2401088, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3749520000
mprotect(0x7f3749568000, 2093056, PROT_NONE) = 0
mmap(0x7f3749767000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x47000) = 0x7f3749767000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\321\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=327024, ...}) = 0
mmap(NULL, 2431720, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37492ce000
mprotect(0x7f374931c000, 2093056, PROT_NONE) = 0
mmap(0x7f374951b000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4d000) = 0x7f374951b000
mmap(0x7f374951e000, 6888, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f374951e000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/liblber-2.4.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=55544, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4e6000
mmap(NULL, 2150888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37490c0000
mprotect(0x7f37490cd000, 2093056, PROT_NONE) = 0
mmap(0x7f37492cc000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc000) = 0x7f37492cc000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\37\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=116960, ...}) = 0
mmap(NULL, 2212016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3748ea3000
mprotect(0x7f3748ebf000, 2093056, PROT_NONE) = 0
mmap(0x7f37490be000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7f37490be000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000b\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144976, ...}) = 0
mmap(NULL, 2221184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3748c84000
mprotect(0x7f3748c9e000, 2093056, PROT_NONE) = 0
mmap(0x7f3748e9d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7f3748e9d000
mmap(0x7f3748e9f000, 13440, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3748e9f000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\272\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1700792, ...}) = 0
mmap(NULL, 3789144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37488e6000
mprotect(0x7f3748a83000, 2093056, PROT_NONE) = 0
mmap(0x7f3748c82000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19c000) = 0x7f3748c82000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libunistring.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\365\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1562664, ...}) = 0
mmap(NULL, 3660040, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3748568000
mprotect(0x7f37486e2000, 2097152, PROT_NONE) = 0
mmap(0x7f37488e2000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17a000) = 0x7f37488e2000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libgnutls.so.30", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\207\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1457760, ...}) = 0
mmap(NULL, 3558216, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3748203000
mprotect(0x7f374835a000, 2097152, PROT_NONE) = 0
mmap(0x7f374855a000, 53248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x157000) = 0x7f374855a000
mmap(0x7f3748567000, 2888, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3748567000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libhogweed.so.4", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 j\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=211704, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4e4000
mmap(NULL, 2306760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3747fcf000
mprotect(0x7f3748002000, 2093056, PROT_NONE) = 0
mmap(0x7f3748201000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x32000) = 0x7f3748201000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libnettle.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\200\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=219304, ...}) = 0
mmap(NULL, 2314384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3747d99000
mprotect(0x7f3747dcd000, 2093056, PROT_NONE) = 0
mmap(0x7f3747fcc000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x33000) = 0x7f3747fcc000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libgmp.so.10", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\223\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=526688, ...}) = 0
mmap(NULL, 2621888, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3747b18000
mprotect(0x7f3747b97000, 2097152, PROT_NONE) = 0
mmap(0x7f3747d97000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7f000) = 0x7f3747d97000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14560, ...}) = 0
mmap(NULL, 2109712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3747914000
mprotect(0x7f3747917000, 2093056, PROT_NONE) = 0
mmap(0x7f3747b16000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f3747b16000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libkrb5.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\27\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=877056, ...}) = 0
mmap(NULL, 2972896, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374763e000
mprotect(0x7f3747704000, 2097152, PROT_NONE) = 0
mmap(0x7f3747904000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc6000) = 0x7f3747904000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libk5crypto.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0PC\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=199104, ...}) = 0
mmap(NULL, 2297976, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374740c000
mprotect(0x7f374743a000, 2097152, PROT_NONE) = 0
mmap(0x7f374763a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2e000) = 0x7f374763a000
mmap(0x7f374763d000, 120, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f374763d000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcom_err.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\23\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14248, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4e2000
mmap(NULL, 2109608, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3747208000
mprotect(0x7f374720b000, 2093056, PROT_NONE) = 0
mmap(0x7f374740a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f374740a000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libkrb5support.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@'\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=43616, ...}) = 0
mmap(NULL, 2139080, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746ffd000
mprotect(0x7f3747007000, 2093056, PROT_NONE) = 0
mmap(0x7f3747206000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9000) = 0x7f3747206000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\00008\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=101168, ...}) = 0
mmap(NULL, 2206336, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746de2000
mprotect(0x7f3746df9000, 2097152, PROT_NONE) = 0
mmap(0x7f3746ff9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7f3746ff9000
mmap(0x7f3746ffb000, 6784, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3746ffb000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libsasl2.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=109296, ...}) = 0
mmap(NULL, 2204648, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746bc7000
mprotect(0x7f3746be0000, 2097152, PROT_NONE) = 0
mmap(0x7f3746de0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0x7f3746de0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libgssapi.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \333\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=265712, ...}) = 0
mmap(NULL, 2361240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746986000
mprotect(0x7f37469c3000, 2097152, PROT_NONE) = 0
mmap(0x7f3746bc3000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3d000) = 0x7f3746bc3000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libp11-kit.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\263\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1237640, ...}) = 0
mmap(NULL, 3334512, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746657000
mprotect(0x7f3746771000, 2097152, PROT_NONE) = 0
mmap(0x7f3746971000, 81920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11a000) = 0x7f3746971000
mmap(0x7f3746985000, 368, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3746985000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4e0000
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libtasn1.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220)\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=75776, ...}) = 0
mmap(NULL, 2171592, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746444000
mprotect(0x7f3746455000, 2097152, PROT_NONE) = 0
mmap(0x7f3746655000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11000) = 0x7f3746655000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libkeyutils.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\22\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14256, ...}) = 0
mmap(NULL, 2109456, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746240000
mprotect(0x7f3746243000, 2093056, PROT_NONE) = 0
mmap(0x7f3746442000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f3746442000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libheimntlm.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=35360, ...}) = 0
mmap(NULL, 2130512, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3746037000
mprotect(0x7f374603f000, 2093056, PROT_NONE) = 0
mmap(0x7f374623e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7f374623e000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libkrb5.so.26", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\315\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=573464, ...}) = 0
mmap(NULL, 2671504, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3745daa000
mprotect(0x7f3745e31000, 2093056, PROT_NONE) = 0
mmap(0x7f3746030000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x86000) = 0x7f3746030000
mmap(0x7f3746036000, 912, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3746036000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libasn1.so.8", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\233\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=661696, ...}) = 0
mmap(NULL, 2756848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3745b08000
mprotect(0x7f3745ba6000, 2097152, PROT_NONE) = 0
mmap(0x7f3745da6000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9e000) = 0x7f3745da6000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libhcrypto.so.4", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`s\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=217560, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4de000
mmap(NULL, 2316904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37458d2000
mprotect(0x7f3745905000, 2093056, PROT_NONE) = 0
mmap(0x7f3745b04000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x32000) = 0x7f3745b04000
mmap(0x7f3745b07000, 2664, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3745b07000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libroken.so.18", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300N\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=88680, ...}) = 0
mmap(NULL, 2184240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37456bc000
mprotect(0x7f37456d1000, 2093056, PROT_NONE) = 0
mmap(0x7f37458d0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14000) = 0x7f37458d0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libffi.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\27\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=31032, ...}) = 0
mmap(NULL, 2127368, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37454b4000
mprotect(0x7f37454bb000, 2093056, PROT_NONE) = 0
mmap(0x7f37456ba000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f37456ba000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libwind.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=165880, ...}) = 0
mmap(NULL, 2261040, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374528b000
mprotect(0x7f37452b3000, 2093056, PROT_NONE) = 0
mmap(0x7f37454b2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x27000) = 0x7f37454b2000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libheimbase.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340(\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=60400, ...}) = 0
mmap(NULL, 2156760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f374507c000
mprotect(0x7f374508a000, 2093056, PROT_NONE) = 0
mmap(0x7f3745289000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd000) = 0x7f3745289000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libhx509.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\20\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=300888, ...}) = 0
mmap(NULL, 2397224, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3744e32000
mprotect(0x7f3744e78000, 2093056, PROT_NONE) = 0
mmap(0x7f3745077000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x45000) = 0x7f3745077000
mmap(0x7f374507b000, 1064, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f374507b000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libsqlite3.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\312\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1082648, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4dc000
mmap(NULL, 3179736, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3744b29000
mprotect(0x7f3744c2c000, 2097152, PROT_NONE) = 0
mmap(0x7f3744e2c000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x103000) = 0x7f3744e2c000
mmap(0x7f3744e31000, 1240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3744e31000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\r\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=39208, ...}) = 0
mmap(NULL, 2322976, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f37448f1000
mprotect(0x7f37448fa000, 2093056, PROT_NONE) = 0
mmap(0x7f3744af9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8000) = 0x7f3744af9000
mmap(0x7f3744afb000, 184864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3744afb000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4da000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4d8000
arch_prctl(ARCH_SET_FS, 0x7f374b4d94c0) = 0
mprotect(0x7f374aaa0000, 16384, PROT_READ) = 0
mprotect(0x7f3744af9000, 4096, PROT_READ) = 0
mprotect(0x7f3748e9d000, 4096, PROT_READ) = 0
mprotect(0x7f3748c82000, 4096, PROT_READ) = 0
mprotect(0x7f3747b16000, 4096, PROT_READ) = 0
mprotect(0x7f3744e2c000, 12288, PROT_READ) = 0
mprotect(0x7f374740a000, 4096, PROT_READ) = 0
mprotect(0x7f3746ff9000, 4096, PROT_READ) = 0
mprotect(0x7f37458d0000, 4096, PROT_READ) = 0
mprotect(0x7f3745da6000, 4096, PROT_READ) = 0
mprotect(0x7f3745289000, 4096, PROT_READ) = 0
mprotect(0x7f3745b04000, 8192, PROT_READ) = 0
mprotect(0x7f37454b2000, 4096, PROT_READ) = 0
mprotect(0x7f3745077000, 12288, PROT_READ) = 0
mprotect(0x7f37456ba000, 4096, PROT_READ) = 0
mprotect(0x7f3746030000, 16384, PROT_READ) = 0
mprotect(0x7f374623e000, 4096, PROT_READ) = 0
mprotect(0x7f3746442000, 4096, PROT_READ) = 0
mprotect(0x7f3746655000, 4096, PROT_READ) = 0
mprotect(0x7f3746971000, 40960, PROT_READ) = 0
mprotect(0x7f3746bc3000, 8192, PROT_READ) = 0
mprotect(0x7f3746de0000, 4096, PROT_READ) = 0
mprotect(0x7f3747206000, 4096, PROT_READ) = 0
mprotect(0x7f374763a000, 8192, PROT_READ) = 0
mprotect(0x7f3747904000, 57344, PROT_READ) = 0
mprotect(0x7f3747d97000, 4096, PROT_READ) = 0
mprotect(0x7f3747fcc000, 8192, PROT_READ) = 0
mprotect(0x7f3748201000, 4096, PROT_READ) = 0
mprotect(0x7f37488e2000, 12288, PROT_READ) = 0
mprotect(0x7f374a492000, 4096, PROT_READ) = 0
mprotect(0x7f37490be000, 4096, PROT_READ) = 0
mprotect(0x7f374855a000, 49152, PROT_READ) = 0
mprotect(0x7f37492cc000, 4096, PROT_READ) = 0
mprotect(0x7f374951b000, 8192, PROT_READ) = 0
mprotect(0x7f3749767000, 8192, PROT_READ) = 0
mprotect(0x7f3749bb8000, 122880, PROT_READ) = 0
mprotect(0x7f3749e43000, 16384, PROT_READ) = 0
mprotect(0x7f374a059000, 4096, PROT_READ) = 0
mprotect(0x7f374a275000, 4096, PROT_READ) = 0
mprotect(0x7f374a6b6000, 4096, PROT_READ) = 0
mprotect(0x7f374acc0000, 4096, PROT_READ) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f374b4d6000
mprotect(0x7f374b03b000, 40960, PROT_READ) = 0
mprotect(0x7f374b2c6000, 12288, PROT_READ) = 0
mprotect(0x55c7f4022000, 4096, PROT_READ) = 0
mprotect(0x7f374b4f1000, 4096, PROT_READ) = 0
munmap(0x7f374b4ec000, 19402)           = 0
set_tid_address(0x7f374b4d9790)         = 44
set_robust_list(0x7f374b4d97a0, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7f3748c89cb0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f3748c96890}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7f3748c89d50, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f3748c96890}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
futex(0x7f37469850e0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
brk(NULL)                               = 0x55c7f527d000
brk(0x55c7f529e000)                     = 0x55c7f529e000
getrandom("\x91", 1, GRND_NONBLOCK)     = 1
stat("/etc/gnutls/default-priorities", 0x7ffe15ee85e0) = -1 ENOENT (No such file or directory)
brk(0x55c7f52cc000)                     = 0x55c7f52cc000
futex(0x7f374b04807c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f374b048088, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be1278, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be121c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749bdf6ec, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be1124, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be10bc, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be10b0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be126c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7f3749be1214, FUTEX_WAKE_PRIVATE, 2147483647) = 0
openat(AT_FDCWD, "/usr/lib/ssl/openssl.cnf", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=10771, ...}) = 0
read(3, "#\n# OpenSSL example configuratio"..., 4096) = 4096
read(3, "ape crash on BMPStrings or UTF8S"..., 4096) = 4096
read(3, " is omitted\n# the certificate ca"..., 4096) = 2579
read(3, "", 4096)                       = 0
close(3)                                = 0
socket(AF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3
close(3)                                = 0
brk(0x55c7f52f1000)                     = 0x55c7f52f1000
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
mmap(NULL, 8392704, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f37440f0000
mprotect(0x7f37440f1000, 8388608, PROT_READ|PROT_WRITE) = 0
clone(child_stack=0x7f37448eff70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f37448f09d0, tls=0x7f37448f0700, child_tidptr=0x7f37448f09d0) = 45
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
poll(NULL, 0, 4)                        = 0 (Timeout)
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("185.15.56.49")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=3, events=POLLOUT|POLLWRNORM}], 1, 0) = 0 (Timeout)
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
poll([{fd=3, events=POLLOUT}], 1, 200)  = 1 ([{fd=3, revents=POLLOUT|POLLERR|POLLHUP}])
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
poll([{fd=3, events=POLLOUT|POLLWRNORM}], 1, 0) = 1 ([{fd=3, revents=POLLOUT|POLLWRNORM|POLLERR|POLLHUP}])
getsockopt(3, SOL_SOCKET, SO_ERROR, [111], [4]) = 0
close(3)                                = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
brk(0x55c7f52ec000)                     = 0x55c7f52ec000
rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
brk(0x55c7f52e8000)                     = 0x55c7f52e8000
brk(0x55c7f52e2000)                     = 0x55c7f52e2000
rt_sigaction(SIGPIPE, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
openat(AT_FDCWD, "/tmp/input", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
close(3)                                = 0
unlink("/tmp/output")                   = 0
rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=NULL, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffe15ee806c) = 46
wait4(46, hashfile is empty or corrupt.

[{WIFEXITED(s) && WEXITSTATUS(s) == 255}], 0, NULL) = 46
rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=46, si_uid=0, si_status=255, si_utime=0, si_stime=0} ---
openat(AT_FDCWD, "/tmp/output", O_RDONLY) = -1 ENOENT (No such file or directory)
futex(0x7f3749be182c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Running strace(1) with -r also yield info on the duration of each instruction.

poll-ing for the downloaded input file as well as the lifetime of the child process were the main offenders in terms of latency.

Additional testing/messing with helloworld

My home gateway runs OpenBSD, with pf. Since, for the purposes of this exercise helloworld does not do HTTPS, I could either:

  1. drop traffic towards the destination 185.15.56.49
  2. redirect 185.15.56.49 to 10.0.0.1 to elicit a 404 response

Further tests:

  1. redirect 185.15.56.49 to 10.0.0.1 configured to serve an MD5 digst of my own, just like the upstream nginx. I created the hashes like so:
openhrc# md5 -s hello
MD5 ("hello") = 5d41402abc4b2a76b9719d911017c592
openhrc# md5 -s world 
MD5 ("world") = 7d793037a0760186574b0282f2f435e7

Serving them over HTTP:

$ curl 10.0.0.1
7d793037a0760186574b0282f2f435e7

Naturally, this removed the 4s wait time involved in fetching the hash.

The program would fail in different ways (excerpts only):

openat(AT_FDCWD, "/tmp/input", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
close(3)                                = 0
unlink("/tmp/output")                   = 0
rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=NULL, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffe15ee806c) = 46
wait4(46, hashfile is empty or corrupt.

[{WIFEXITED(s) && WEXITSTATUS(s) == 255}], 0, NULL) = 46
rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f374a6f7f20}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=46, si_uid=0, si_status=255, si_utime=0, si_stime=0} ---
openat(AT_FDCWD, "/tmp/output", O_RDONLY) = -1 ENOENT (No such file or directory)
futex(0x7f3749be182c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

and

openat(AT_FDCWD, "/tmp/input", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
write(3, "<!DOCTYPE html>\n<html>\n<head>\n<m"..., 427) = 427
close(3)                                = 0
unlink("/tmp/output")                   = 0
rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f5099473f20}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f5099473f20}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=NULL, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffdd044803c) = 46
wait4(46, No hashes loaded.

Hashfile '/tmp/input' on line 1 (<!DOCTYPE html>): Token length exception
Hashfile '/tmp/input' on line 2 (<html>): Token length exception
Hashfile '/tmp/input' on line 3 (<head>): Token length exception
Hashfile '/tmp/input' on line 4 (<meta ...ent="text/html; charset=utf-8"/>): Token length exception
Hashfile '/tmp/input' on line 5 (<title>403 Forbidden</title>): Token length exception
Hashfile '/tmp/input' on line 6 (<style type="text/css"><!--): Token length exception
Hashfile '/tmp/input' on line 7 (body {...SE', 'Comic Neue', sans-serif; }): Token length exception
Hashfile '/tmp/input' on line 8 (hr { b... 0; border-bottom: 1px dashed; }): Token length exception
Hashfile '/tmp/input' on line 10 (--></style>): Token length exception
Hashfile '/tmp/input' on line 11 (</head>): Token length exception
Hashfile '/tmp/input' on line 12 (<body>): Token length exception
Hashfile '/tmp/input' on line 13 (<h1>403 Forbidden</h1>): Token length exception
Hashfile '/tmp/input' on line 14 (<hr>): Token length exception
Hashfile '/tmp/input' on line 15 (<address>OpenBSD httpd</address>): Token encoding exception
Hashfile '/tmp/input' on line 16 (</body>): Token length exception
Hashfile '/tmp/input' on line 17 (</html>): Token length exception
[{WIFEXITED(s) && WEXITSTATUS(s) == 255}], 0, NULL) = 46
rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f5099473f20}, NULL, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f5099473f20}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=46, si_uid=0, si_status=255, si_utime=0, si_stime=0} ---
openat(AT_FDCWD, "/tmp/output", O_RDONLY) = -1 ENOENT (No such file or directory)
futex(0x7f509895d82c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0)                           = ?
+++ exited with 0 +++
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment