Analysis: What happened with Yahoo! and DMARC?

Or: Why is my mailing list broken?

It’s all over the media, the DMARC-discuss mailing list is full of postings: Yahoo! has switched to a DMARC “p=reject” policy. This broke many mailing lists and now people are crying out in horror.

DMARC is a protocol to describe policies to mitigate phishing via e-mail. Put in a nutshell it basically enforces that a message came directly from the domain shown in the From-header or was at least signed by that domain. For details and precise descriptions check out dmarc.org. And yes, I think it’s a great idea.

So, what did Yahoo! do precisely?

To determine this I wrote a small script querying all DMARC policies of all “yahoo” subdomains below all effective top level domains.

WARNING: Only run this script if you exactly know what you are doing. It is going to make about 7.000 DNS requests in a relatively short time frame, thus killing your internet connection, depending on the abuse policy of your ISP.

Here is the summary:
./checkdmarc yahoo
Running query, this may take a while ...
SERVFAIL: 44
connection timed out; no servers could be reached: 27
has no TXT record: 69
NXDOMAIN: 6011
is an alias for: 95
p=none: 50
p=quarantine: 1
p=reject: 279

Your experience may vary. Also the script might not catch all possible DNS responses. But you get the picture:

Yahoo! activated p=reject on at least 279 domains, p=quarantine on one (yahoo.ne.jp) and 50 domains are running a p=none policy.

The 50 domains seem to belong to European countries and domains that refer to commercial usage mainly. This might be explained by the (sad) fact, that DMARC and its base technologies (SPF and DKIM) are widely used everywhere except in Europe.

The script

[Update: download the beautified version here.]
#!/bin/bash
#
# Check DMARC
#
# Version 2014.04.12
#
# Copyright Sven Krohlas, GNU GPLv3+
#
# Checks all possible effective TLD names of a brand (like GMX or Yahoo)
# for their DMARC policy.
#
# Requires:
# * Internet access, obviously
# * https://publicsuffix.org/list/effective_tld_names.dat and fetches it on demand
# * wget

brand=$1

if [ ! -f effective_tld_names.dat ]; then
wget https://publicsuffix.org/list/effective_tld_names.dat
fi

# cleanup file
grep -v "//" effective_tld_names.dat | grep -e '^$' -v > clean_list.txt


# Create the query script. The query basically looks like "host -t TXT _dmarc.gmx.net"
cat clean_list.txt | sed 's/^\*\.//' | sed "s/^/host -t TXT _dmarc.$brand./" > queries
chmod +x queries


# Run the query script, save the results
echo "Running query, this may take a while ..."
./queries > results


# Create statistics
echo -n "SERVFAIL: "
grep -c "SERVFAIL" results

echo -n "connection timed out; no servers could be reached: "
grep -c "connection timed out; no servers could be reached" results

echo -n "has no TXT record: "
grep -c "has no TXT record" results

echo -n "NXDOMAIN: "
grep -c "NXDOMAIN" results

echo -n "is an alias for: "
grep -c "is an alias for" results

echo -n "p=none: "
grep -c "p=none" results

echo -n "p=quarantine: "
grep -c "p=quarantine" results

echo -n "p=reject: "
grep -c "p=reject" results


# Print important results
echo ""
echo "p=none details:"
grep "p=none" results

echo ""
echo "p=quarantine details:"
grep "p=quarantine" results

The results in detail

p=none details:
_dmarc.yahoo.com.ar descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.at descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.au descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.be descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.bg descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.br descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ca descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cl descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cn descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.cn descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.co descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com descriptive text "v=DMARC1\; p=reject\; sp=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com, mailto:dmarc_y_rua@yahoo.com\;"
_dmarc.yahoo.cz descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.de descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.dk descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ee descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.es descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.fi descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.fr descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gr descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.hk descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.hr descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hu descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.hu descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.id descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ie descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.in descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.in descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.it descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.kr descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.lt descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.lv descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.mx descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.my descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nl descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.no descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.pe descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ph descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pl descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pt descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ro descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.se descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.sg descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.si descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sk descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.th descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.tw descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ua descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ve descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.vn descriptive text "v=DMARC1\; p=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"

p=quarantine details:
_dmarc.yahoo.ne.jp descriptive text "v=DMARC1\; p=quarantine\; rf=afrf\; rua=mailto:ymail_dmarc_report@yahoo.ne.jp\; ruf=mailto:ymail_dmarc_report@yahoo.ne.jp"

p=reject details:
_dmarc.yahoo.ac descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ae descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.af descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.af descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ag descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ai descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.off.ai descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ai descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.am descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.an descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.ao descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.as descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.at descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.au descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.az descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.az descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ba descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.ba descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.bh descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.bh descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.bi descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.biz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.bo descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.bo descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.eco.br descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.bs descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.bs descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.bs descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.bt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.bt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.bw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.by descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.by descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.bz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.bz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org.bz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.qc.ca descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cat descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cd descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ch descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gs.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gz.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gx.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hi.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hl.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nm.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.qh.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sn.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.xj.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.xz.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mo.cn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.co descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com descriptive text "v=DMARC1\; p=reject\; sp=none\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com, mailto:dmarc_y_rua@yahoo.com\;"
_dmarc.yahoo.cr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.cr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.cx descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.dj descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.dm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.dm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.do descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.do descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ec descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ec descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.eg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.es descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nom.es descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org.es descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.eu descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.fm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gd descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ge descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ge descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.gg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.gi descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gl descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.gr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.gr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.gt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gy descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.gy descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hk descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.im descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.im descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.firm.in descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.in descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org.in descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gen.in descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ind.in descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.info descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.io descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ir descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.is descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.je descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.je descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.jo descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.jo descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.jobs descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.aichi.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.akita.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.aomori.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.chiba.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ehime.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.fukui.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.fukuoka.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.fukushima.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gifu.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gunma.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hiroshima.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hokkaido.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.hyogo.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ibaraki.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ishikawa.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.iwate.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kagawa.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kagoshima.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kanagawa.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kochi.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kumamoto.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kyoto.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mie.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.miyagi.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.miyazaki.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nagano.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nagasaki.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nara.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.niigata.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.oita.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.okayama.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.okinawa.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.osaka.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.saga.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.saitama.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.shiga.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.shimane.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.shizuoka.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tochigi.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tokushima.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tokyo.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tottori.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.toyama.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.wakayama.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.yamagata.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.yamaguchi.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.yamanashi.jp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.kn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org.kn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.kz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.kz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.la descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.lb descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.lc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.lc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.ls descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.lu descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.lv descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ly descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ly descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.ma descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.md descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.me descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.me descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mobi descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.mt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mv descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.mv descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mx descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.my descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.my descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.na descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nf descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.nf descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ng descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ng descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.nu descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.om descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.om descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pa descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.pa descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pe descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pf descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.pf descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ph descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pk descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.pk descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.pk descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.web.pk descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.pl descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.pn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.pr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ps descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ps descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.pt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.pw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.py descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.qa descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.qa descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ru descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.ru descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.rw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sa descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.sa descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.sb descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.sb descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sh descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sl descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.so descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.so descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sr descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.st descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sv descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.sv descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.sx descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.in.th descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tj descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.tj descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.tj descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.tj descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tk descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tl descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tm descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tp descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.travel descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.tt descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tv descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.tw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.idv.tw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.game.tw descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.tz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ua descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.in.ua descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ug descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.us descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.uy descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.uz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.uz descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.vc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.vc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.vc descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.ve descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.vg descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.vi descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.vn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.net.vn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.org.vn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.biz.vn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.info.vn descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.ws descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.com.de descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.jp.net descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.mex.com descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.gr.com descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.us.org descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"
_dmarc.yahoo.co.nl descriptive text "v=DMARC1\; p=reject\; pct=100\; rua=mailto:dmarc-yahoo-rua@yahoo-inc.com\;"

18 Millionen Zugangsdaten und journalistische Verantwortung

Disclaimer: Ich versuche mich heute an einem gewagten Spagat. Einerseits rege ich mich über die Ereignisse rund um die 18 Millionen kopierter Zugangsdaten sehr auf. Andererseits arbeite ich bei einem der betroffenen Unternehmen, darf und werde natürlich keine Internas ausplaudern. Ich werde daher nicht alle Kommentare unter diesem Artikel beantworten. Und natürlich enthält er keine Internas.

Dem Bundesamt für Sicherheit in der Informationstechnik (BSI) sind 18 Millionen Mailadressen mit Passwörtern in die Hände gefallen. Allgemein öffentlich bekannt wurde dies vergangenen Donnerstag, als der Spiegel in einer Topnews darüber berichtete. So weit, so schlecht für die Betroffenen.

Bis hierhin könnte man denken, dass alles normal verlief. Die Presse erfährt von einer Aufsehen erregenden Nachricht und berichtet, wie es ihre Pflicht ist, darüber. So weit, so schlecht für die Betroffenen.

Wie, schlecht für die Betroffenen? Warum ist Berichterstattung schlecht?

In der Haut des BSI

Um die These zu verstehen, dass Berichterstattung über ein Datenleck den Schaden für Betroffene vergrößern kann, muss man sich in die Lage des BSI versetzen.

Was kann das BSI tun, nachdem es diese Daten erhalten oder von ihnen erfahren hat? Die folgende Liste ist sicher nicht vollständig, sollte die Problematik aber verdeutlichen. Das BSI könnte …

  • … versuchen, alle Betroffenen selbst per Mail anzuschreiben? Moment, Mails mit Warnhinweisen auf einen Zugang versenden, der höchstwahrscheinlich vom Angreifer ebenso mitgelesen wird? Keine gute Idee. Er könnte diese Nachrichten einfach vor dem Nutzer löschen.
  • … eine Webseite zur Abfrage bereitstellen? Aber dann könnte das jeder für beliebige Accounts prüfen. »Hey, dein Account wurde gehackt!« Keine gute Idee.
  • … eine Webseite zur Abfrage bereitstellen und per Mail informieren? Schon besser, denn der Angreifer weiß nicht wann die Mail für einen Account ankommt. Vor dem Nutzer löschen ist dasmit wesentlich schwerer, aber er kann es noch immer. Auch nicht gerade eine helle Idee. Aber immerhin die beste bisher.
  • … mit den Providern zusammenarbeiten? Vielleicht haben die bessere Möglichkeiten zur Kommunikation mit ihren Kunden?
  • … die Öffentlichkeit informieren?

Moment? Öffentlichkeit informieren? Wie der Spiegel es getan hat? Das ist es doch!

Die Öffentlichkeit informieren?

Überlegen wir uns was passiert, wenn die Öffentlichkeit zuerst informiert wird. Im Wesentlichen geschehen drei Dinge:

  1. Kein Nutzer wird gewarnt, denn niemand weiß, ob man selbst persönlich betroffen ist. Kein Nutzer kann gezielt auf eine abstrakte Gefahr reagieren.
  2. Der Angreifer wird gewarnt und kann reagieren. Für ihn ist die Gefahr konkret. Er weiß um welche Accounts es geht.
  3. Die Auflagen und Klickraten des Spiegels steigen.

Hmmm, das klingt also doch nicht mehr so gut. Außer für den Spiegel. Und den Angreifer.

Ok, dann gehen wir einen Schritt zurück.

Zusammenarbeit mit den Providern

Liegt auf diesem Weg vielleicht die Lösung begraben? Die Antwort ist ein klares »Jain«.

Provider ist nicht gleich Provider.

Es gibt Anbieter wie die Telekom oder Arcor, die ihren Kunden zusammen mit dem Internetzugang Mailaccounts verkaufen. Diese Anbieter haben meist valide Adress- und Kontodaten ihrer Kunden und stehen mit ihnen regelmäßig in Kontakt. So könnte man die Kunden zusammen mit der monatlichen Rechnung warnen, sofern diese per Briefpost zugestellt wird. Oder, falls die Kunden in der Lage sind valide Rechnungen per Mail von Viren zu unterscheiden, könnte man es hier auch per Mail zumindest einmal versuchen.

Da diese Anbieter im Mailbereich eine eher untergeordnete Rolle spielen und den Telefonanschluss üblicherweise ebenso verkaufen wäre sogar eine telefonische Warnung möglich. Ein paar hunderttausend betroffene Kunden hat man in nur wenigen Wochen durchtelefoniert.

Dann gibt es Hostinganbieter. Hier wird die Kontaktaufnahme schon schwerer, eine Telefonnummer ist oft nicht mehr vorhanden. Aber dennoch werden Rechnungen bezahlt und meist ist die Anschrift des Kunden bekannt.

Doch es gibt auch noch viele werbefinanzierte Freemailer. Und was haben die? Richtig, meist nichts. Die Kunden haben sich anonym registriert, keine oder falsche Kontaktdaten hinterlegt, die sie zudem jederzeit ändern können. Hier gibt es noch zwei Kontaktwege: Die Webseite oder wieder E-Mail. Beides nach erfolgreichem Login, der auch dem Angreifer zur Verfügung steht. Diese Anbieter kontrollieren den Markt für Maildienste in Deutschland.

Die Situation ist für alle Beteiligten äußerst aussichtslos. Die möglichen Auswege sind alles andere als risikofrei.

Oh Scheiße!

Jetzt merkt ihr was der Spiegel angestellt hat: Er hat den Angreifer gewarnt, nicht jedoch die Nutzer. Dieser konnte fröhlich hinterlegte Kontaktdaten und Passwörter ändern und somit alle Nutzer endgültig aus ihren Accounts aussperren. Denn nun könnten sie sich nicht mehr gegenüber Ihrem Mailanbieter zu erkennen geben. Scheiße, wa!

Ob der Angreifer dies getan hat wissen jetzt natürlich nur die 18 Millionen Opfer. Opfer von Cyberkriminellen und des Spiegels.
Hätte man die Nutzer jedoch zuerst informiert, hätten Nutzer und Angreifer zumindest gleich hohe Chancen sich in den Account einzuloggen. Nun stecken die Füße der Nutzer in Betonschuhen und der Angreifer hat einen Frühstart hingelegt. Ganz großes Kino!

Responsible Disclosure

Die Presse hat in diesem Fall vollkommen ihre Verantwortung vergessen. Ob aus Unwissenheit oder aus Profitgier kann ich nicht sagen.
Üblicherweise gibt man im Falle der Entdeckung von Sicherheitslücken den Herstellern ein paar Wochen Zeit, um das Problem zu beheben. Ich selbst bin hier Hardliner und würde diese Frist so kurz wie irgendwie möglich halten. Aber eine realistische Frist muss sein. Denn sonst bestrafe ich mit der Veröffentlichung nur die Nutzer.

Wenn ein Hersteller eines Produktes nicht reagieren sollte kann und muss man dennoch veröffentlichen, allein schon, um öffentlichen Druck aufzubauen. Dies war hier jedoch ganz klar nicht der Fall.

Und jetzt?

Dass die Presse über ihre Verantwortung nachdenken sollte ist wohl die Quintessenz dieser Zeilen. Doch die wenigsten Journalisten werden je von diesem Artikel erfahren.

Die Dienstanbeiter müssen natürlich auch höchste Sicherheitsstandards umsetzen, Passwörter gut gesalzen und gehasht speichern (nicht wie so oft geschrieben »verschlüsselt«). Auch Zwei-Faktor-Authentifizierung kann nicht schaden. Doch auch auf die gibt es inzwischen tagtägliche Angriffe.

Dennoch deuten die wenigsten Anzeichen darauf hin, dass diese Daten über Sicherheitslücken bei Dienstanbietern gesammelt wurden. Hierzu benötigt man relativ viel Know-How und meist auch Rechenleistung. Gänzlich ausschließen kann man es zwar nicht, die Nutzer jedoch basierend auf dieser Möglichkeit zu beruhigen ist blanker Wahnsinn.

Für die Nutzer bleiben die üblichen Tipps: starke Passwörter, die nicht wiederverwendet werden, ausschließliche Nutzung von verschlüsselten Zugängen, aktuelle Software und Virenscanner nutzen. Letztere helfen jedoch nur selten bei brandneuen Viren, wie wir sie jeden Tag per Mail und auf Webseiten erhalten. Achja: Diese Regeln gelten für Desktop, Laptop, Router und Handy. Die letzten beiden werden meist vergessen. Und fremden Rechnern sollte man grundsätzlich auch nicht trauen, denn auf deren Sicherheitsniveau kann man sich nicht verlassen.

#Bombergate: Richtig falsch

Ein Gate meiner Ex-Partei hat es in meine Timeline geschafft. Und da es das meiner Meinung nach in der Partei falsch gehandhabte Thema Gewalt tangiert möchte ich ein paar Worte dazu loswerden.

Was ist passiert?

Laut einem Artikel des Berliner Kuriers soll ein Mitglied der Piratenpartei mit den Worten »Thanks Bomber Harris« demonstrieren gegangen sein.

Arthur Harris war die Person, die die Flächenbombardements gegen Deutschland im Zweiten Weltkrieg befohlen hatte.

Oh shit! Und weiter?

Wie zu erwarten streiten sich nun viele unter #bombergate darüber, was wohl schlimmer ist: die Bombardements? Die Nazis? Und wer trägt Schuld? Und darf man trauern? Wenn ja für wen? Darf man andere trauern lassen?

Und dein Senf dazu, du alter Bombenleger?

Eine Option wird meistens vergessen. Die, dass es oft kein »Richtig« gibt. Denn, so meine These:

Jedes Ziel von Gewalt ist ein Opfer. Gewalt gegeneinander abwiegen ist moralisch schwach.

Meiner Meinung nach kann man Gewalt nicht gegeneinander aufwiegen. Was ist schlimmer: Ein Toter oder 12 Milliarden Tote? Für mich gibt es hier keinen Unterschied. Nur vollkommene Gewaltlosigkeit ist für mich als moralischer Kompass akzeptabel. Dies schließt eine Ordnungsrelation, also die Möglichkeit eines Vergleichs, zwischen Gewalttaten aus. Jede ist abzulehnen, jede ist schlimm.

Dennoch treffen wir oft falsche Entscheidungen. Schlimmer noch: Wir kommen ständig in Situationen, in denen man nicht die Wahl zwischen »Richtig« und »Falsch« hat. Es gibt Situationen, in denen jede Entscheidung falsch ist. Aber eine muss man treffen. Das macht die Entscheidung danach jedoch nicht besser.

Was hätte Harris tun sollen? Den Nazis zusehen? Das hätte zu mehr Gewalt geführt. Einschreiten? Auch dies führt zu Gewalt. Beide Entscheidungen sind falsch. Aber einen dieser Wege musste er nehmen. Beide führen zu Gewalt. Beide sind falsch.

Sich rückblickend auf eine der beiden Seiten zu stellen ist leicht. Für diese Seite zu argumentieren ebenso. Es zeugt aber von einem Unverständnis des Leids, das die Opfer erleben mussten. Möglicherweise auch von mangelnder Empathie.

Ich bemitleide auch Harris: Denn er musste eine falsche Entscheidung fällen, die so oder so zu unermesslichem Leid führt.

Dieser Gedankengang führt nebenbei auch zu interessanten Folgerungen. So ist auch unser Strafrechtssystem, bei dem wir Menschen mit Gewalt die Freiheit entziehen, von Gewalt geprägt. Auch hier gilt: Eine Entscheidung muss in jedem Fall her, denn wir müssen weitere Taten verhindern. Das jedoch macht keine der einem Richter zur Verfügung stehenden Optionen zur »richtigen« Option.

Und wie hättest du dich an Stelle von Harris entschieden?

Mit an Sicherheit grenzender Wahrscheinlichkeit falsch.

Linux block IO performance

Im Studium gab es eine für mich damals sehr konstruierte Aufgabe in den Systemarchitektur-Tutorien: Zwei Prozesse koordinieren den Zugriff auf eine gemeinsam genutzte Ressource, indem sie in eine Variable ihre Prozess-ID schreiben, falls sie die Ressource nicht erlangen können. 0 schreiben sie nach der Freigabe der Ressource. Sie erlangen die Ressource, wenn die Variable bei der Prüfung den Wert 0 besitzt. Ergebnis: Sitzen die Prozesse auf verschiedenen CPUs invalidieren sie sich gegenseitig ihre Caches.

Und fast genau dieses Szenario findet sich, wie ich dank dem hervorragenden Kernel Log von Heise lesen durfte, im Linux Block Device Layer. Denn hier gibt es eine zentrale Request Queue, um die sich alle CPUs bemühen müssen. Das Ergebnis: Mehr als ungefähr eine Million IO-Operationen sind nicht möglich. Diese werden aber für moderne SSDs benötigt.

Die Lösung findet sich im kommenden Kernel 3.13 sowie in einer schönen Veröffentlichung: »Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems«. Sie besteht im Wesentlichen aus einem Design mit zwei Ebenen an Queues und diversen kleineren Verbesserungen, auch im Userspace. Definitiv eine Leseempfehlung mit vielen Benchmarks und Erklärungen zur Designentscheidung.

Drunken Bishop OpenSSH random art fingerprint visualization

Schon oft habe ich mich gefragt was ssh-keygen eigentlich genau tut, wenn es nach Erstellung eines neuen Schlüsselpaares ein »random art image« anzeigt:

sven@workstation:~> ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sven/.ssh/id_rsa): /home/sven/tmp/id_rsa_demo
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sven/tmp/id_rsa_demo.
Your public key has been saved in /home/sven/tmp/id_rsa_demo.pub.
The key fingerprint is:
9c:6f:b1:7f:a2:01:ad:82:9d:80:87:39:37:9a:2a:51 sven@workstation.site
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
|                 |
|                 |
|  E+   . o       |
| .= =   S o      |
|.  * = . + o     |
| .o . + . =      |
|..     . . o. .  |
|o         ...o   |
+-----------------+

Die Antwort findet sich, leicht verständlich erklärt, in »The drunken bishop: An analysis of the OpenSSH fingerprint visualization algorithm«.

Kurzfassung: Das Bild soll leichter für Menschen vergleichbar sein als der Fingerprint eines Schlüssels. Dazu wird der Fingerprint in 64 Zwei-Bit-Tupel aufgeteilt, die Mitte eines 17×9 großen Feldes als Startpunkt genommen und nach einfachen Regeln (00: gehe nach links oben; 01: nach rechts oben; 10: nach links unten; 11: rechts unten) das Feld abhängig vom Fingerprint durchlaufen. Je nachdem wie oft ein Feld dabei erreicht wurde wird es mit einem anderen ASCII-Zeichen markiert.

Das Paper liefert zudem noch den Beginn einer Sicherheitsanalyse des Verfahrens.

Ich habe noch nicht nachgesehen, aber falls ihr weitere Papers zu dem Verfahren habt würden sie micht interessieren. Denn Verbesserungspotential scheint es zu geben und die Idee an sich hat Potential.