| 
  
    | 
      
        |  Author | Topic: find out weak passwords best practices  (Read 11853 times) |  |  
  
    | 
      
        | 
          
            | Pete Finnigan PeteFinnigan.com Administrator
 
      
 
 
  Oracle Security is easier if you design for it
 
 
 View Profile | WWW |  Email
 
 Gender:
  Posts: 309
 
 | 
              
                |  | find out weak passwords best practices «  on: Nov 21st, 2005, 2:10pm »
 | Quote | Modify |  Hi,
 I want to write a small script in SQL, eventually perl, java or C, to find out weak passwords.
 
 My first try is to look in dba_users and try
 connect user/user
 for each user. also connect user/resu
 
 Since it is highly critical, my script should display only "Warning : weak password" and not the found password. It should be easy to use, but should not be easily overused to gain illegal access to the database. So a bruteforce engine does not seem to be appropriate, imho. I will not download some "unsupported-by-oracle" binary to do that, because it could be make the whole system even more unsecure than before, and will never be approved by the customer.
 
 Thanks for your advises
 Laurent
 
 |  
            | 
              
                |  |  IP Logged |  Pete Finnigan (email:pete@petefinnigan.com)
 Oracle Security Web site: https://www.petefinnigan.com
 Forum: https://www.petefinnigan.com/forum/yabb/YaBB.cgi
 Oracle security blog: https://www.petefinnigan.com/weblog/entries/index.html
 |  |  |  
  
    | 
      
        | 
          
            | Pete Finnigan PeteFinnigan.com Administrator
 
      
 
 
  Oracle Security is easier if you design for it
 
 
 View Profile | WWW |  Email
 
 Gender:
  Posts: 309
 
 | 
              
                |  | Re: find out weak passwords best practices « Reply #1 on: Nov 21st, 2005, 4:44pm »
 | Quote | Modify |  Laurent,
 
 Instead of looking for users with password=usercode why don't you create a password policy (look at $ORACLE_HOME/rdbms/admin/utlpwdmg.sql) that rejects weak passwords: password=usercode, password=resu, etc.
 After defining a password policy you have to expire the passwords to force people to change their passwords.
 If creating a password policy is not a solution to you then let me know as I can provide you with a Perl (using DBD/DBI modules) script to check for weak passwords.
 
 Ivan
 |  
            | 
              
                |  |  IP Logged |  Pete Finnigan (email:pete@petefinnigan.com)
 Oracle Security Web site: https://www.petefinnigan.com
 Forum: https://www.petefinnigan.com/forum/yabb/YaBB.cgi
 Oracle security blog: https://www.petefinnigan.com/weblog/entries/index.html
 |  |  |  
  
    | 
      
        | 
          
            | Pete Finnigan PeteFinnigan.com Administrator
 
      
 
 
  Oracle Security is easier if you design for it
 
 
 View Profile | WWW |  Email
 
 Gender:
  Posts: 309
 
 | 
              
                |  | Re: find out weak passwords best practices « Reply #5 on: Nov 22nd, 2005, 8:07am »
 | Quote | Modify |  David, your advise not to try connection is sound.
 
 If I want to write a script that compare hashes how should I start ?
 
 I could imagine the following :
 
 1) select databasename, username, password in every databases
 2) create user identified by user in a database created for this special purpose
 3) compare the hashes and reveal weak database/users
 4) create user identified by "dictionary word"
 5) compare the hashes
 ...
 
 Or what is the best way to see if
 
 user1/user1 matches user1/BBE7786A584F9103
 
 without trying the connection?
 
 I am using AIX and I am not allowed try "external software" on my pc
 
 |  
            | 
              
                |  |  IP Logged |  Pete Finnigan (email:pete@petefinnigan.com)
 Oracle Security Web site: https://www.petefinnigan.com
 Forum: https://www.petefinnigan.com/forum/yabb/YaBB.cgi
 Oracle security blog: https://www.petefinnigan.com/weblog/entries/index.html
 |  |  |  
  
    | 
      
        | 
          
            | Pete Finnigan PeteFinnigan.com Administrator
 
      
 
 
  Oracle Security is easier if you design for it
 
 
 View Profile | WWW |  Email
 
 Gender:
  Posts: 309
 
 | 
              
                |  | Re: find out weak passwords best practices « Reply #6 on: Nov 22nd, 2005, 4:14pm »
 | Quote | Modify |  one more try, feedback welcome :
 
 declare
 cursor c1 is select username u from dba_users where username=upper(username);
 cursor c2 is select upper(username) u from dba_users group by upper(username),password having count(*)>1;
 begin
 for r in c1 loop
 execute immediate 'create user "'||lower(r.u)||'" identified by "'||r.u||'"';
 end loop;
 for r in c2 loop
 dbms_output.put_line('WARNING: '||r.u||' has a default password');
 end loop;
 for r in c1 loop
 execute immediate 'drop user "'||lower(r.u)||'"';
 end loop;
 end;
 /
 
 WARNING: DIP has a default password
 WARNING: OUTLN has a default password
 WARNING: USER1 has a default password
 WARNING: CTXSYS has a default password
 WARNING: EXFSYS has a default password
 WARNING: GASTON has a default password
 WARNING: TSMSYS has a default password
 
 
 I am using the concatenation and uppercase property of the algorythm to make that test.
 |  
            | 
              
                |  |  IP Logged |  Pete Finnigan (email:pete@petefinnigan.com)
 Oracle Security Web site: https://www.petefinnigan.com
 Forum: https://www.petefinnigan.com/forum/yabb/YaBB.cgi
 Oracle security blog: https://www.petefinnigan.com/weblog/entries/index.html
 |  |  |  
  
    | 
      
        | 
          
            | Pete Finnigan PeteFinnigan.com Administrator
 
      
 
 
  Oracle Security is easier if you design for it
 
 
 View Profile | WWW |  Email
 
 Gender:
  Posts: 309
 
 | 
              
                |  | Re: find out weak passwords best practices « Reply #7 on: Dec 23rd, 2005, 4:45am »
 | Quote | Modify |  Why don't you take a look at the scanner PeteF wrote in 2001 while still at Pentest Limited?
 
 It will check for default usernames/passwords based on auditing the hashvalues in dba_users against a pre-tabulated set of username/hashvalue pairs.
 
 It's available at http://www.pentest.co.uk/sql/scanner.sql
 
 If you update it with the list of username/password/passwordhash values from this site (Tools/Default Password List) you will pretty much have a tool to audit for default passwords.
 
 The benefit is that this is an audit that does not try repeated logon or create and drop users, actions that ought to be audited (by oracle db auditing features) in a production database.
 So you will not set off any alarms !!!!
 
 The script further has the benefit of being self-contained, i.e. it doesn't need 'write' access to the database - and it is written in pl/sql so you can review it to make sure it's not doing anything "funny".
 
 Oh, BTW it does a few other checks - you can disable those.
 |  
            | 
              
                |  |  IP Logged |  Pete Finnigan (email:pete@petefinnigan.com)
 Oracle Security Web site: https://www.petefinnigan.com
 Forum: https://www.petefinnigan.com/forum/yabb/YaBB.cgi
 Oracle security blog: https://www.petefinnigan.com/weblog/entries/index.html
 |  |  |  
  
    | 
      
        | 
          
            | Pete Finnigan PeteFinnigan.com Administrator
 
      
 
 
  Oracle Security is easier if you design for it
 
 
 View Profile | WWW |  Email
 
 Gender:
  Posts: 309
 
 | 
              
                |  | Re: find out weak passwords best practices « Reply #8 on: Dec 23rd, 2005, 8:06am »
 | Quote | Modify |  thanks for the hint, but I have another approach.
 
 If the users are ADAMS ANONYMOUS BLAKE CLARK CTXSYS DBSNMP DIP DMSYS EXFSYS HR JONES MDDATA MDSYS MGMT_VIEW ODM ODM_MTR OE OLAPSYS ORDPLUGINS ORDSYS OUTLN PERFSTAT PM QS QS_ADM QS_CB QS_CBADM QS_CS QS_ES QS_OS QS_WS SCOTT SH SI_INFORMTN_SCHEMA TSMSYS WK_TEST WKPROXY WKSYS WMSYS XDB, they must be locked, so I do not care of their password.
 
 I am looking to check in the database for "weak" password. Ok, username=password is the weakest, but my method is so slow that I cannot check millions of password for each user.
 
 I would like to write a much much much faster gethash(username,password), similar to orabf, but in plsql for example. Than I would be able to compare passwords. This is all what my function is about. David advise about NGS sounds wise, but if NGS can do it, I should also be able to do it.
 
 For the moment, I do not have the time to write my own algorythm, so I simply checking username=password with my doubious code above...
 
 Cheers
 Laurent
 
 
 PS: well, the code above revealed default password for DIP, but in my productive script, I check only for lock_date is null
 
 
  declare
 cursor c1 is select username u from dba_users where username=upper(username) and LOCK_DATE is null;
 cursor c2 is select upper(username) u from dba_users group by upper(username),password having count(*)>1;
 begin
 begin
 execute immediate 'create profile verifynull limit PASSWORD_VERIFY_FUNCTION null';
 exception
 when others then
 dbms_output.put_line(sqlerrm);
 dbms_output.put_line(' received while creating profile verifynull');
 end;
 for r in c1 loop
 begin
 execute immediate 'create user "'||lower(r.u)||'" identified by "'||r.u||'" profile verifynull account lock';
 exception
 when others then
 dbms_output.put_line(sqlerrm);
 dbms_output.put_line(' received while creating user '||lower(r.u));
 end;
 end loop;
 for r in c2 loop
 dbms_output.put_line('FATAL: '||r.u||' has a default password');
 end loop;
 for r in c1 loop
 begin
 execute immediate 'drop user "'||lower(r.u)||'"';
 exception
 when others then
 dbms_output.put_line(sqlerrm);
 dbms_output.put_line(' received while dropping user '||lower(r.u));
 end;
 end loop;
 begin
 execute immediate 'drop profile verifynull';
 exception
 when others then
 dbms_output.put_line(sqlerrm);
 dbms_output.put_line(' received while dropping profile verifynull');
 end;
 end;
 /
 
 |  
            | 
              
                |  |  IP Logged |  Pete Finnigan (email:pete@petefinnigan.com)
 Oracle Security Web site: https://www.petefinnigan.com
 Forum: https://www.petefinnigan.com/forum/yabb/YaBB.cgi
 Oracle security blog: https://www.petefinnigan.com/weblog/entries/index.html
 |  |  |  
 |