Okay. I suppose I can cede your point.

So let's see if I understand our plans correctly here:

1) Create a Password type with the following interface:

public class Password {
        private final char[] value;
        public Password(char[] value);
        public char[] getValue(); <-- this should clone the value
        @Override public String toString();
}

@PluginAttributes of type Password will be written to any logs as ten asterisks 
(**********) instead of their values.

2) Create an interface (say, PluggableDecryptionProvider or similar) with NO 
implementations:

public interface PluggableDecryptionProvider {
        public char[] decrypt(char[]);
}

3) Create a new configuration element <Decrypter 
implementation="foo.bar.PluggableDecryptionProviderImpl" />

4) All @PluginAttributes starting with "enc:" (case-sensitive) get run through 
the decrypter, if one is specified. Do we want to only support decryption of 
Password @PluginAttributes?

Thoughts?

Nick

On Aug 23, 2013, at 10:33 AM, Ralph Goers wrote:

> And it isn't as easy as you make it sound.  We won't be providing the code to 
> do the encoding/decoding, just the interface.  That would mean whoever is 
> trying to gain access would have to find the class object and decompile it to 
> get the information they would need. While that isn't hard it isn't trivial 
> either.
> 
> Whether we all agree it isn't necessarily as good I since I am quite sure it 
> is a requirement in many organizations I am not in favor of simply telling 
> them we won't do it.  All that will do is encourage them to fork the code.
> 
> Ralph
> 
> On Aug 23, 2013, at 8:25 AM, Remko Popma wrote:
> 
>> You're preaching to the choir... :-)
>> I'm not saying it's a smart rule, just that it is a rule. Bureaucracy, 
>> sigh... 
>> 
>> From a security point of view it is not complete nonsense either. No system 
>> is impenetrable, it is just a matter of how much time and effort the bad 
>> guys are willing to spend... You could see this as an example of "layered 
>> security" that (while not sufficient by itself) aims to increase the 
>> cost/effort of penetration for the bad guys...
>> 
>> 
>> On Friday, August 23, 2013, Nick Williams wrote:
>> So y'all were forbidden to use Tomcat then? It's the most popular web 
>> application server, and plaintext is your only option for passwords in 
>> config files. For all the reasons I outlined, but mainly because putting 
>> passwords that aren't plaintext in config files is merely a false sense of 
>> security. Log4j is open source. Any mechanism we provide to encrypt/decrypt 
>> passwords is easily found and manually applied to passwords that a hacker 
>> retrieves from a config file.
>> 
>> I'll repeat again: the problem is unauthorized access to the config file. 
>> The symptom is access to the passwords. You have to treat the problem, not 
>> the symptoms.
>> 
>> Nick
>> 
>> On Aug 22, 2013, at 11:23 PM, Remko Popma wrote:
>> 
>>> My company doesn't allow plaintext passwords in config files either. 
>>> 
>>> On Friday, August 23, 2013, Ralph Goers wrote:
>>> I worked in an environment like Kurt's. passwords simply were not allowed 
>>> in clear text in config files.  I still think a plugin is the right way to 
>>> handle that.
>>> 
>>> Ralph
>>> 
>>> On Aug 22, 2013, at 11:55 AM, Nick Williams <[email protected]> 
>>> wrote:
>>> 
>>>> This is what file permissions are for. The file should be protected so 
>>>> that only those who are authorized may view it. For example, on a Linux 
>>>> machine it may be 0400 where the user is the account that the application 
>>>> runs under. Then only the application and root can view the file.
>>>> 
>>>> N
>>>> 
>>>> On Aug 22, 2013, at 1:32 PM, Kurt Lehrke wrote:
>>>> 
>>>>> I believe there’s a small oversight in the idea that if someone has 
>>>>> access to your box, that it’s game over.
>>>>>  
>>>>> Think about a situation where a company may have a box with 
>>>>> administrators and users.   They may still want levels of security.  For 
>>>>> example, say you have a JDBCAppender that has a user name and password in 
>>>>> their log4j2 configuration.   The administrator may have access to their 
>>>>> application and the database, but a user may only need access to the box. 
>>>>>  Therefore, having the user name and password hashed in the configuration 
>>>>> file would ensure that a user (non admin) on the system can’t get to the 
>>>>> database.   This is an interesting challenge since the password hash 
>>>>> would have to be a symmetric algorithm.  It’s still merely only a light 
>>>>> level of security since anyone with bad intent could still figure out the 
>>>>> decryption by looking at the encryption algorithm.
>>>>>  
>>>>> In my experience (supply chain development), some companies are pretty 
>>>>> strict on having any password left in plain text, even if it is just for 
>>>>> logging.
>>>>>  
>>>>> Just a thought.
>>>>>  
>>>>> Thanks,
>>>>> Kurt
> 

Reply via email to