Force the use of engine in config file
    Frederick Gotham 
    cauldwell.thomas at gmail.com
       
    Mon Nov  4 12:49:41 UTC 2019
    
    
  
Okay first I'll show the changes that I've made to the source code and 
build setup for "libopenssl".
I have added two compiler flags:  OPENSSL_NO_RDRAND, OPENSSL_LOAD_CONFIG
Not that the following compiler flag is NOT set: 
OPENSSL_NO_AUTOLOAD_CONFIG
And here are the source code changes:
(1) File: ssl_init.c
    Purpose of Alteration: Clear the option flag bit for not loadind conf
    Alteration: In the function "OPENSSL_init_ssl", insert the following 
line at the beginning of the function:
    opts &= ~(uint64_t)OPENSSL_INIT_NO_LOAD_CONFIG;  /* Clear the bit for 
not loading TPM2 engine */
(2) File: drbg_lib.c
    Purpose of Alteration: Make a log of all uses of the built-in 
generator
    Alteration: Rename the function definition "drbg_bytes" to 
"drbg_bytes_REAL", and then append the following to the end of the file:
#include <sys/file.h>
static int drbg_bytes(unsigned char *out, int count)
{
	int const retval = drbg_bytes_REAL(out, count);  /* I renamed the 
real function */
	
	int const fd_lock = open("/tmp/locker_for_randomness_log", O_CREAT);
	flock(fd_lock, LOCK_EX);
	{
		FILE *const pfile = fopen("/var/log/bad_randomness.log", "a");
		if ( NULL != pfile )
		{ 
			time_t ltime;
			struct tm result;
			char stime[32];
			ltime = time(NULL);
			localtime_r(<ime, &result);
			asctime_r(&result, stime);
			stime[ strlen(stime) - 1 ] = ' ';  /* Get rid of newline 
char at the end */
			fprintf(pfile, "%s - - - %u bytes\n", stime, (unsigned)
count);
			fclose(pfile);
		}		
	}
	flock(fd_lock, LOCK_UN);
	
	return retval;
}
I have reconfigured and rebuilt "libopenssl", and so I boot up my device 
and then I run the following command:
    tail -F /var/log/bad_randomness.log
This file shouldn't exist if the built-in generator is never used -- but 
some how, some way, even with all the changes I've made above, at least 
one of the running processes that links with "libssl.so" is NOT using the 
engine I specify in the config file "/etc/ssl/openssl.cnf". Looking at the 
output from the 'tail' command above, it's requesting 16 bytes of random 
data every 6 seconds. Here's the repeated line:
    Mon Nov 04 12:41:06 2019  - - - 16 bytes
Here's how I get a list of all the procesess currently using "libssl.so":
    grep libssl /proc/*/maps | cut -d ':' -f 1 | cut -d '/' -f 3 | uniq | 
xargs -n1 -i ls -l /proc/{}/exe
And there's the output I'm getting:
lrwxrwxrwx    1 root     root             0 Feb 16 02:54 /proc/1622/exe -> 
/usr/sbin/lighttpd
lrwxrwxrwx    1 root     root             0 Feb 16 02:54 /proc/1681/exe -> 
/opt/prodanko/bin/callar_plugin
So this means that one of these two progams is some how managing to load 
up the 'libopenssl' library and get it to use its internal random number 
generator. I wonder if this is being achieved with explicit library calls 
to functions such as "OPENSSL_add_all_algorithms_noconf"?
I suppose I could also add a stack trace to my log file to try figure out 
which process is requesting those 16 bytes every 6 seconds.
And idead on what to try next?
    
    
More information about the openssl-users
mailing list