From owner-svn-src-head@freebsd.org Sat Dec 10 19:20:48 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CBC4CC71EE4; Sat, 10 Dec 2016 19:20:48 +0000 (UTC) (envelope-from chmeeedalf@gmail.com) Received: from mail-io0-x241.google.com (mail-io0-x241.google.com [IPv6:2607:f8b0:4001:c06::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 849441CF5; Sat, 10 Dec 2016 19:20:48 +0000 (UTC) (envelope-from chmeeedalf@gmail.com) Received: by mail-io0-x241.google.com with SMTP id y124so13669026iof.1; Sat, 10 Dec 2016 11:20:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=cc:message-id:from:to:in-reply-to:content-transfer-encoding :mime-version:subject:date:references; bh=mSevRXV5orJFgdX5GchulMUeEU2hvkN19UgXNfsJcT0=; b=G9rTQ/D+bpc2+l0VuM0B+ukcSoCxT7NlkucQgOyXDZqxL4w2NzMp2yRw9H1eB7nK5P coBBGErOWgO1VRWreyTbEH+CwI2HFGjPpu5gPQ/NFY7LZ+Hpa9oGq7m/KbYb9J6PkHkf GyK0lp1mDEhpZ8k3yPrnjR0EYupHiZUc+0kYfguSzEr15twDZl32QC3utcEv9qofo0xi wsGXLl8IAYOb+F6XAKlRr8hWO/jhqT/VY65PgE8M9mOcy/kI6VYkdw0tikYdp7X85ySZ lP/aFVlYFO62/LjRoGt5qNsG3lPJBDRE1aKMZISHMi5bx9yzZT1mULCyidad7+if1Kb+ r2WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:cc:message-id:from:to:in-reply-to :content-transfer-encoding:mime-version:subject:date:references; bh=mSevRXV5orJFgdX5GchulMUeEU2hvkN19UgXNfsJcT0=; b=NjN0U7hiZhSBfXnvWZkgKbucfXGqv8N3jO3BVBZn+/i8Sks86uKQIjUssSGfas1yoH sEslCni0yiMt+5DN+jj6myeWQDhmqBnLfTJghzIW59ILploL0ZK88iEluCwfUp8WZIXY 54KDywSJ1WY3Bd3EXqPM+l4eeda2NUbHzxKRtGJZOnRFATBP3R+ZRZAi5YjN5rOoOd6B PBW0DrRa8EUuyjYZL/8T1pLIZSeJalUpz6SiY20NnIqqdsTHZ9+8iokFlHpoA1xF/6xB e8cnRSkvUSU3eksOZ2lcG2eZpqH6eQpKVK45xqKQ4t+XATsqdXsQZfCfdFL7LwAfz6fn thjA== X-Gm-Message-State: AKaTC02mYfOVBdkKso25riz9Gvl3CYsHIvO8ZgewSPw8l2aSXWr/yuaM1xa0USk+GYXdOA== X-Received: by 10.107.181.77 with SMTP id e74mr37468651iof.99.1481397647746; Sat, 10 Dec 2016 11:20:47 -0800 (PST) Received: from blackstar.knownspace (50-80-150-234.client.mchsi.com. [50.80.150.234]) by smtp.gmail.com with ESMTPSA id k205sm3725767ita.15.2016.12.10.11.20.46 (version=TLS1 cipher=AES128-SHA bits=128/128); Sat, 10 Dec 2016 11:20:47 -0800 (PST) Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-Id: <043C7408-A0FA-4316-B24B-3A181146FE20@gmail.com> From: Justin Hibbits To: Konrad Witaszczyk In-Reply-To: <201612101620.uBAGKdUg033773@repo.freebsd.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v936) Subject: Re: svn commit: r309818 - in head: etc/defaults etc/rc.d sbin sbin/decryptcore sbin/dumpon sbin/savecore share/man/man5 sys/amd64/amd64 sys/arm/arm sys/arm64/arm64 sys/conf sys/ddb sys/dev/null sys/geo... Date: Sat, 10 Dec 2016 13:20:50 -0600 References: <201612101620.uBAGKdUg033773@repo.freebsd.org> X-Mailer: Apple Mail (2.936) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 10 Dec 2016 19:20:48 -0000 On Dec 10, 2016, at 10:20 AM, Konrad Witaszczyk wrote: > Author: def > Date: Sat Dec 10 16:20:39 2016 > New Revision: 309818 > URL: https://svnweb.freebsd.org/changeset/base/309818 > > Log: > Add support for encrypted kernel crash dumps. > > Changes include modifications in kernel crash dump routines, > dumpon(8) and > savecore(8). A new tool called decryptcore(8) was added. > > A new DIOCSKERNELDUMP I/O control was added to send a kernel crash > dump > configuration in the diocskerneldump_arg structure to the kernel. > The old DIOCSKERNELDUMP I/O control was renamed to > DIOCSKERNELDUMP_FREEBSD11 for > backward ABI compatibility. > > dumpon(8) generates an one-time random symmetric key and encrypts > it using > an RSA public key in capability mode. Currently only AES-256-CBC is > supported > but EKCD was designed to implement support for other algorithms in > the future. > The public key is chosen using the -k flag. The dumpon rc(8) script > can do this > automatically during startup using the dumppubkey rc.conf(5) > variable. Once the > keys are calculated dumpon sends them to the kernel via > DIOCSKERNELDUMP I/O > control. > > When the kernel receives the DIOCSKERNELDUMP I/O control it > generates a random > IV and sets up the key schedule for the specified algorithm. Each > time the > kernel tries to write a crash dump to the dump device, the IV is > replaced by > a SHA-256 hash of the previous value. This is intended to make a > possible > differential cryptanalysis harder since it is possible to write > multiple crash > dumps without reboot by repeating the following commands: > # sysctl debug.kdb.enter=1 > db> call doadump(0) > db> continue > # savecore > > A kernel dump key consists of an algorithm identifier, an IV and an > encrypted > symmetric key. The kernel dump key size is included in a kernel > dump header. > The size is an unsigned 32-bit integer and it is aligned to a block > size. > The header structure has 512 bytes to match the block size so it > was required to > make a panic string 4 bytes shorter to add a new field to the > header structure. > If the kernel dump key size in the header is nonzero it is assumed > that the > kernel dump key is placed after the first header on the dump device > and the core > dump is encrypted. > > Separate functions were implemented to write the kernel dump header > and the > kernel dump key as they need to be unencrypted. The dump_write > function encrypts > data if the kernel was compiled with the EKCD option. Encrypted > kernel textdumps > are not supported due to the way they are constructed which makes > it impossible > to use the CBC mode for encryption. It should be also noted that > textdumps don't > contain sensitive data by design as a user decides what information > should be > dumped. > > savecore(8) writes the kernel dump key to a key.# file if its size > in the header > is nonzero. # is the number of the current core dump. > > decryptcore(8) decrypts the core dump using a private RSA key and > the kernel > dump key. This is performed by a child process in capability mode. > If the decryption was not successful the parent process removes a > partially > decrypted core dump. > > Description on how to encrypt crash dumps was added to the > decryptcore(8), > dumpon(8), rc.conf(5) and savecore(8) manual pages. > > EKCD was tested on amd64 using bhyve and i386, mipsel and sparc64 > using QEMU. > The feature still has to be tested on arm and arm64 as it wasn't > possible to run > FreeBSD due to the problems with QEMU emulation and lack of hardware. > > Designed by: def, pjd > Reviewed by: cem, oshogbo, pjd > Partial review: delphij, emaste, jhb, kib > Approved by: pjd (mentor) > Differential Revision: https://reviews.freebsd.org/D4712 > > Added: > head/sbin/decryptcore/ > head/sbin/decryptcore/Makefile (contents, props changed) > head/sbin/decryptcore/decryptcore.8 (contents, props changed) > head/sbin/decryptcore/decryptcore.c (contents, props changed) > Modified: > head/etc/defaults/rc.conf > head/etc/rc.d/dumpon > head/sbin/Makefile > head/sbin/dumpon/Makefile > head/sbin/dumpon/dumpon.8 > head/sbin/dumpon/dumpon.c > head/sbin/savecore/savecore.8 > head/sbin/savecore/savecore.c > head/share/man/man5/rc.conf.5 > head/sys/amd64/amd64/minidump_machdep.c > head/sys/arm/arm/minidump_machdep.c > head/sys/arm64/arm64/minidump_machdep.c > head/sys/conf/NOTES > head/sys/conf/files > head/sys/conf/options > head/sys/ddb/db_textdump.c > head/sys/dev/null/null.c > head/sys/geom/geom_dev.c > head/sys/i386/i386/minidump_machdep.c > head/sys/kern/kern_dump.c > head/sys/kern/kern_shutdown.c > head/sys/mips/mips/minidump_machdep.c > head/sys/sparc64/sparc64/dump_machdep.c > head/sys/sys/conf.h > head/sys/sys/disk.h > head/sys/sys/kerneldump.h Nice! Any reason you left out PowerPC from this list though? - Justin