419 lines
18 KiB
Plaintext
419 lines
18 KiB
Plaintext
=============================================================================
|
||
INTRANETWORK MEMORANDUM SPAN MANAGEMENT OFFICE
|
||
=============================================================================
|
||
19-OCT-1989
|
||
|
||
TO: ALL SPAN ROUTING CENTER MANAGERS AND REMOTE-NODE MANAGERS
|
||
|
||
FROM: RON TENCATI - SPAN SECURITY MANAGER
|
||
GODDARD SPACE FLIGHT CENTER CODE 630.2
|
||
GREENBELT, MD. 20771
|
||
(301)286-5223
|
||
|
||
SUBJ: INFORMATION REGARDING THE DECNET WORM AND PROTECTION MEASURES
|
||
|
||
----------
|
||
The following information covers several aspects of the "WANK" DECnet worm
|
||
which was released into the "DECnet Internet" earlier in the week.
|
||
|
||
Information contained in prior reports written by John McMahon of GSFC and
|
||
Kevin Oberman of LLNL was used in preparing report. The assistance of
|
||
Digital Equipment Corporation is also gratefully acknowledged.
|
||
|
||
Previous messages regarding this worm appearing on various mailing lists
|
||
have indicated that system managers with questions or infected nodes should
|
||
call other organizations.
|
||
|
||
For clarification, any SPAN-connected system that believes itself to be
|
||
infected, or attacked should contact ONLY the SPAN management at Goddard
|
||
Space Flight Center, Greenbelt, MD. The security effort is being
|
||
coordinated by this group and all reports should be directed there. The
|
||
contact number is (301)286-7251 or (301)286-5223. Electronic mail should be
|
||
sent to NSSDCA::TENCATI or NSSDCA::NETMGR only. Do not send infection
|
||
reports to any other node on SPAN.
|
||
|
||
HEPnet sites should contact FNAL::DEMAR.
|
||
|
||
|
||
BACKGROUND
|
||
----------
|
||
|
||
The worm's mission is to propagate itself randomly across the network,
|
||
to seek out systems with poor security, and to establish itself in a
|
||
priviliged account whereupon it will modify the system's SYS$ANNOUNCE
|
||
banner to the following message:
|
||
|
||
|
||
|
||
W O R M S A G A I N S T N U C L E A R K I L L E R S
|
||
_______________________________________________________________
|
||
\__ ____________ _____ ________ ____ ____ __ _____/
|
||
\ \ \ /\ / / / /\ \ | \ \ | | | | / / /
|
||
\ \ \ / \ / / / /__\ \ | |\ \ | | | |/ / /
|
||
\ \ \/ /\ \/ / / ______ \ | | \ \| | | |\ \ /
|
||
\_\ /__\ /____/ /______\ \____| |__\ | |____| |_\ \_/
|
||
\___________________________________________________/
|
||
\ /
|
||
\ Your System Has Been Officically WANKed /
|
||
\_____________________________________________/
|
||
|
||
You talk of times of peace for all, and then prepare for war.
|
||
|
||
---------
|
||
We don't currently see that the WORM is destructive, BUT it wastes
|
||
resources, and may result in denial of service by locking out priviliged
|
||
users or causing non-infected nodes to consume disk space storing all the
|
||
audit records from the failed access attempts.
|
||
|
||
The worm attempts to establish itself onto a system by exploiting various
|
||
weaknesses in the DECnet environment. Some of these weaknesses have been
|
||
addressed by previous SPAN directives and guidelines. Systems that have
|
||
implemented these guidelines are not at risk.
|
||
|
||
A random number generator is used to pick the next node the worm will try
|
||
to infect. The worm contains an internal list of 82 canned usernames that
|
||
it will try against a system.
|
||
|
||
In addition, it attempts to copy the file RIGHTSLIST.DAT from the selected
|
||
target node. This file is normally protected W:R. If this file is
|
||
successfully copied, a list of usernames specific to the target system will
|
||
be generated and some subset of those will be appended to the "canned"
|
||
list. The candidate words the worm uses whether or not it was successful
|
||
at accessing RIGHTSLIST.DAT are the following:
|
||
|
||
ACCOUNITING ACCOUNTS ALLIN1 APPLETALK ARCHIVE
|
||
BACKUP CADCAM COGNOS CRAYSTN CUSTOMER
|
||
DDSNET DEC DECNET DEFAULT DEMO
|
||
DFS$DEFAULT DIGITAL DNS$SERVER DQS$SERVER ETHERNIM
|
||
EXOS FIELD GAMES GUEST HASP
|
||
IBM INGRES INVENTORY ISSYS IVP
|
||
LIBRARY LN03_DLAND LPS$SERVER MAC MAIL
|
||
MAILER MANAGER MANUALS MASS11 MBMANAGER
|
||
MIS MRGATE MANAGER NETNONPRIV NETPRIV
|
||
NEWSMGR NOTES$SERVER OPER OPERATOR ORACLE
|
||
OSI PCAPP PCCOMMON PLUTO POSTMASTER
|
||
RDBVMS$REM RHM SECURITY SHUTDOWN SNACSV
|
||
SPEAR SPM SRS STUDENT SUPPLIES
|
||
SYSINF SYSTEM SYSTEST SYSTEST_CLIG TAPESYS
|
||
TCP TELEX TEMP TEST TRAINING
|
||
TRANSFER USER USER1 USERP VAXNET
|
||
VAXSIM VTX VXSYS
|
||
|
||
The PASSWORDS tried against the set of accounts MAY be the username
|
||
ONLY, OR other passwords may be tried (such as DIGITAL, PSIPAD, MANAGER,
|
||
etc) apparently depending on the version of the WORM. A bug in the worm
|
||
prevents it from testing the null password as previously suspected.
|
||
|
||
--------------
|
||
[The following section provides information relating to the behavior of
|
||
the worm. This information was primarily supplied by Kevin Oberman of
|
||
LLNL and John McMahon of GSFC]
|
||
--------------
|
||
|
||
1. The program assures that it is working in a directory to which the owner
|
||
(itself) has full access (Read, Write,Execute, and Delete).
|
||
|
||
2. The program checks to see if another copy is still running. It looks for a
|
||
process with the first 5 characters of "NETW_". If such is found, it deletes
|
||
itself (the file) and stops its process.
|
||
|
||
NOTE
|
||
|
||
This check is done using the F$GETJPI system service. The results
|
||
vary depending on the amount of priviliges the account possesses.
|
||
Non-priviliged accounts which are penetrated will only be able to
|
||
return information about their own UIC, so multiple copies of the
|
||
worm could be running simultaneously under different usernames.
|
||
|
||
|
||
3. The program then changes the default DECNET account password to a random
|
||
string of at least 12 characters.
|
||
|
||
4. Information on the infected node and account/password used to access the
|
||
system is mailed to a central collection point on SPAN.
|
||
|
||
5. The process changes its name to "NETW_" followed by a random number.
|
||
|
||
6. It checks to see if it has SYSNAM priv. If so, it defines the system
|
||
announcement message to be the WANK banner.
|
||
|
||
7. If it has SYSPRV, it disables mail to the SYSTEM account.
|
||
|
||
8. Also if it has SYSPRV, it modifies the system login command procedure
|
||
(SYLOGIN.COM) to APPEAR to delete all of a user's files. (It really does
|
||
nothing.)
|
||
|
||
9. The procedure then scans the accounts logical name table for symbols
|
||
which contain directory specifications. Each directory located is searched
|
||
for command procedures within it protected (W:RWED). Any such procedures
|
||
have code inserted at the top which tries to modify the FIELD account to a
|
||
known password with login from any source and all privs. This is a
|
||
primitive virus, but very effective IF the procedure should be executed by
|
||
a priviliged account.
|
||
|
||
10. It proceeds to attempt to access other systems by picking node numbers
|
||
at random. It then used PHONE to get a list of active users on the remote
|
||
system. It proceeds to irritate them by causing the PHONE object to send
|
||
them a one-line "fortune cookie" type message. The appearance of this
|
||
message does not indicate a penetration attempt on that node, more
|
||
appropriately, it indicates an "irritation attempt".
|
||
|
||
NOTE
|
||
If your site receives these PHONE messages the source node
|
||
information can be found in the NETSERVER.LOG files in your DECnet
|
||
default account.
|
||
|
||
11. The program tries to access the RIGHTSLIST.DAT file as previously
|
||
described earlier.
|
||
|
||
12. It then steps through the list of usernames it has built and uses FAL
|
||
to validate the candidate userid/password combination. If a password is
|
||
guesses, the worm copies itself over to the target system and starts itself
|
||
via the SUBMIT/REMOTE feature of VMS.
|
||
|
||
13. When the worm finishes with a system, it picks another random system and
|
||
repeats (forever).
|
||
|
||
|
||
|
||
SECURITY GUIDELINES TO STOP THE SPREAD OF THIS WORM:
|
||
====================================================
|
||
|
||
|
||
1. It is IMPERATIVE that all systems protect or remove the DECnet TASK 0
|
||
object to prevent reoccurrance of this worm, OR MORE SERIOUS ATTACKS
|
||
OF THIS KIND IN THE FUTURE!
|
||
|
||
The TASK object can be secured by either of the following methods:
|
||
|
||
Method 1):
|
||
Issue the command:
|
||
|
||
NCP> CLEAR OBJECT TASK ALL
|
||
|
||
after the network is started up. This command can also be
|
||
inserted into the procedure SYSTARTUP.COM (SYSTARTUP_V5.COM on V5.x
|
||
systems) after the call to STARTNET.COM. In addition while the system
|
||
is running, this command must be executed EACH TIME the network is
|
||
restarted.
|
||
|
||
Method 2):
|
||
Issue the following commands ONCE:
|
||
|
||
NCP> SET OBJECT TASK USER DECNET PASSWORD <a bunch of garbage>
|
||
NCP> DEFINE OBJECT TASK USER DECNET PASSWORD <a bunch of garbage>
|
||
|
||
This causes a login failure to be generated whenever the TASK
|
||
object is accessed. Once done, this change will be permanent.
|
||
|
||
NOTE
|
||
We have received one report that TASK 0 is required
|
||
for DECwindows. Read your documentation!
|
||
|
||
|
||
2. Under NO circumstances it is acceptable for an account to have a
|
||
password the same as the username. Passwords (passPHRASES) should be
|
||
created so that they are difficult to guess, multi-word phrases are
|
||
preferable. As a precaution, we recommend that all passwords be changed.
|
||
Additionally, system managers may choose to revalidate ALL accounts.
|
||
|
||
If a system had the DECNET TASK 0 protected as above, the DECNET account
|
||
protected against SUBMIT/REMOTE (described below) and no user had their
|
||
userid as their password, it was immune to this WORM. As a result, the
|
||
number of nodes actually INFECTED by this attack is relatively small. The
|
||
number ATTACKED however, is large.
|
||
|
||
3. NETWORK ACCOUNTS
|
||
To protect against the SUBMIT/REMOTE attack, run AUTHORIZE and make sure
|
||
that all network account flags are set to NOBATCH, NODIALUP, NOLOCAL,
|
||
and NOREMOTE.
|
||
|
||
4. FIELD ACCOUNT
|
||
Make sure the FIELD ACCOUNT does not have the password FIELD. DISUSER the
|
||
account. You must SEARCH all .COM files for a "field/remote/dialup". If
|
||
the search shows it is in .COM files, They have a trojan horse appended
|
||
to the files. When the .COM file is executed, This Trojan horse will try
|
||
to reset account FIELD to /NODISUSER and password to FIELD. You should
|
||
either delete the corrupted .COM file and obtain a good one elsewhere, or
|
||
examine the file and remove the affected lines of the command procedure.
|
||
|
||
5. WORM FILES
|
||
The WORM source files are W.COM or a single alphabetic character (C or D)
|
||
followed by 4 or 5 numeric characters. (Cnnnnn.COM), ("nnnn" represents a
|
||
random number). The WORM will start a process or processes running.
|
||
These processes are named in format NETW_nnnn, and should be deleted.
|
||
PHONE_nnnn may also be running as the WORM utilizes the PHONE object in
|
||
an attempt to send a message to a user on another randomly selected node.
|
||
|
||
6. ALARMS
|
||
Some alarms generated by the WORM are related to PHONE.EXE and FAL.EXE.
|
||
The majority of the alarms are login failures as the WORM attempts to log
|
||
into specific accounts.
|
||
|
||
We recommend that alarms be set immediately for logins, logouts, breakin
|
||
attempts, modifications to the system and net UAF's, and to changes to
|
||
user and system passwords.
|
||
|
||
|
||
DISCOVERY AND CLEANUP
|
||
----------------------
|
||
|
||
1. Log into a "privileged account"
|
||
$ SHOW SYSTEM
|
||
Look for NETW_dddd (dddd represents 4 or 5 random digits)
|
||
IF NETW_dddd is found, note the process ID and do:
|
||
$ STOP PROCESS/ID=NETW_dddd
|
||
|
||
The command procedure included below can be used by system
|
||
managers to perform this function in the background. It is
|
||
recommended that this procedure be run for the next week or
|
||
so until the worm is killed-off.
|
||
|
||
2. Check the protection on all command procedures. If any are
|
||
(W:REWD), check for infection. There should be two versions. The
|
||
older one should be OK unless multiple infection has occurred.
|
||
Generally the oldest version is OK but this is not guaranteed.
|
||
|
||
An easy method is to execute the command on every disk:
|
||
|
||
$SEARCH dev:[000000...]*.COM;* PASS=FIELD
|
||
|
||
Any infected files will contain the line:
|
||
|
||
$mcr authorize add field/remote/dialup/network/batch/defpriv=all
|
||
/priv=all/flag=(nodisuser,nocaptive,nopwd_expire)/pass=field
|
||
|
||
3. Redefine or deassingn the SYS$ANNOUNCE logical name. Replace
|
||
the correct SYS$ANNOUNCE messages. (Note the initial value of
|
||
SYS$ANNOUNCE to identify the infected user account and location of
|
||
the false announce message files (on infected systems only).
|
||
|
||
4. Clean up SYSLOGIN.COM. Remove the bogus file deletion routine.
|
||
|
||
5. Search all login directories for files named Cddddd.com or
|
||
Dddddd.com. Dddddd.COM is a dummy file which precedes the actual
|
||
infection. Cddddd.COM is the worm itself (normally both are
|
||
deleted by the worm).
|
||
|
||
6. If your node is attacked or penetrated, please contact the SPAN
|
||
Management immediately via MAIL or by phone. Send all messages
|
||
to either NSSDCA::TENCATI or NSSDCA::NETMGR. If you do not have
|
||
NSSDCA defined in your database, use the node number 6277::. We
|
||
need to know which nodes have the worm running on them so we can
|
||
coordinate cleanup measures with the appropriate personnel.
|
||
|
||
NOTE
|
||
A tell-tale sign that your node was ATTACKED will be multiple
|
||
login failure reports in your operator.log file.
|
||
|
||
|
||
7. DO NOT DELETE ANY OF YOUR LOG FILES OR AUDIT TRAILS. THIS
|
||
INFORMATION MAY BE REQUESTED OF YOU LATER IF THIS MATTER IS GOING
|
||
TO BE PROSECUTED.
|
||
|
||
|
||
PREVENTION MEASURES
|
||
-------------------
|
||
|
||
1. Ensure all user accounts have good password management. (No
|
||
"user user" or null passwords.)
|
||
|
||
2. No world READ command procedures in user or priviliged
|
||
accounts.
|
||
|
||
3. No TASK objects.
|
||
|
||
4. Do not use the the account names as the password on network
|
||
accounts. (Use the V5.2 approach - separate object userid's)
|
||
|
||
5. Ensure all network accounts are set NOBATCH, NOLOCAL, NODIALUP,
|
||
and NOREMOTE and have a PRCLIM of 1.
|
||
|
||
6. Audit all changes by AUTHORIZE. Analyze audit trail for changes
|
||
to the FIELD account.
|
||
|
||
7. Place an ALARM ACE on SYS$MANAGER:SYLOGIN.COM;* for
|
||
WRITE+DELETE+SUCCESS access. Enable ACL auditing. Analyze the
|
||
audit trail for change to SYLOGIN.COM.
|
||
|
||
8. Make sure ACCOUNTING and OPCOM are running and proper alarms
|
||
are set.
|
||
|
||
9. Protect RIGHTSLIST.DAT against World access. Alternatively
|
||
move or rename it and define the logical symbol RIGHTSLIST
|
||
to the new file. ($DEF/SYS/EXEC RIGHTSLIST <renamed file>)
|
||
This will limit the ability of the worm to determine
|
||
actual valid usernames.
|
||
----------------------------------------------------------------------------
|
||
|
||
The following command procedure was written by John McMahon at GSFC. It
|
||
can be run as a batch job under a priviliged account. This procedure
|
||
searches all processes on a running system to determine if the worm process
|
||
is present. If detected, the worm is deleted.
|
||
|
||
|
||
---------------------------- ANTIWANK.COM ----------------------------------
|
||
$!
|
||
$! Antiwank.Com - This program performs two functions. It kills any
|
||
$! copy of the worm currently running (any process starting with NETW_
|
||
$! in it's name) and disguises itself as a copy of the worm to help
|
||
$! prevent new copies from being created.
|
||
$!
|
||
$! This program should be submitted to a batch queue under the username
|
||
$! SYSTEM. It requires WORLD priv to check the process names on your
|
||
$! CPU. It runs continuously, but uses little overhead.
|
||
$!
|
||
$! This program uses the process name "NETW_AntiWank". It should not be
|
||
$! confused as a copy of the worm program itself (which uses
|
||
$! NETW_randomnumber).
|
||
$!
|
||
$! The system manager should add additional userids to the line
|
||
$! beginning with SEND_MAIL_TO. If the program detects the worm,
|
||
$! it will send a detection message to the userids in SEND_MAIL_TO.
|
||
$!
|
||
$! John McMahon
|
||
$! NASA/GSFC CODE 630.4
|
||
$!
|
||
$! 18-OCT-1989 16:11:56.21
|
||
$!
|
||
$! SPAN: SDCDCL::FASTEDDY
|
||
$! Internet: Fasteddy@Dftnic.Gsfc.Nasa.Gov
|
||
$! Bitnet: Fasteddy@Dftbit
|
||
$!
|
||
$! Phone: 301-286-2045
|
||
$!
|
||
$ Set NoON
|
||
$ AntiWank_Name = "NETW_AntiWank"
|
||
$ Process_Name_Prefix = "NETW_"
|
||
$ Send_Mail_To = "SYSTEM"
|
||
$ Set Process/Priv=(World)
|
||
$ Set Process/Name="''AntiWank_Name'"
|
||
$ Start:
|
||
$ Context = ""
|
||
$ Pid_Loop:
|
||
$ Check_Pid = F$Pid(Context)
|
||
$ If Check_Pid .Eqs. "" Then Goto End_Pid_Loop
|
||
$ Check_Prcnam = F$Edit(F$Getjpi(Check_Pid,"PRCNAM"),"TRIM")
|
||
$ Write Sys$Output "Process Name: ",Check_Prcnam
|
||
$ If Check_Prcnam .Eqs. AntiWank_Name Then Goto Pid_Loop
|
||
$ If F$Extract(0,5,Check_Prcnam) .Eqs. Process_Name_Prefix Then -
|
||
Gosub Action_Routine
|
||
$ Goto Pid_Loop
|
||
$!
|
||
$ End_Pid_Loop:
|
||
$ Write Sys$Output F$TIME()," ANTIWANK is still working for you"
|
||
$ Wait 00:10:00
|
||
$ Goto Start
|
||
$!
|
||
$ Action_Routine:
|
||
$ Write Sys$Output "Action Routine"
|
||
$ Username = F$Getjpi(Check_Pid,"Username")
|
||
$ Stop/Id='Check_Pid'
|
||
$ Mail NL: 'Send_Mail_To' -
|
||
/SUBJECT="Worm Terminated ''$Status' ''Check_Prcnam' ''Check_Pid' ''Username'"
|
||
YES
|
||
$ Return
|
||
---------------------------END OF ANTIWANK.COM-------------------------
|
||
|