I came across this issue myself when configuring Cisco ASA firewalls with 
OSSEC v2.8.3.  I found that both the ssh_pixconfig_diff  (PIX) and 
ssh_asa-fwsmconfig_diff (ASA)  scripts have some issues with them, 
including:

• Expect statement has the wrong case used for some responses (e.g. 
Password instead of password);
• SSH is set specifically to use DES only
• Output from the SSH session will include extra newlines and Connection to 
[host] closed by remote host at times, triggering false positive change 
alerts.

To address these issues I created a customized script.  I can provide you 
the whole script, but specifically to address your issue you can simply try 
making one change in your own script.  In your ssh_pixconfig_diff script, 
locate this line:

spawn ssh -c des $hostname

Remark that line out and use this one instead:

spawn ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 $hostname


If you encounter some of the other issues, here's my entire revised script 
that works for me - all the highlights are changes from the original script 
(based on the ASA script, not the PIX script):

#!/usr/bin/env expect

 

###############################################################################

#

# PROGRAM:  ssh_asa-custom_diff

# AUTHOR:   Bruce A. Westbrook

# DATE:     2017-04-27

# PURPOSE:  Check ASA for configuration changes

#

# DEPENDENCIES:

#           expect

#

# REVISIONS:

#

#           2017-04-27 - v1.0

#             - Initial release, forked from the OSSEC provided 

#               "ssh_asa-fwsmconfig_diff" script

#

###############################################################################

 

# Agentless monitoring

#

# Copyright (C) 2009 Trend Micro Inc.

# All rights reserved.

#

# This program is a free software; you can redistribute it

# and/or modify it under the terms of the GNU General Public

# License (version 2) as published by the FSF - Free Software

# Foundation.

 

# Send log entry that we're starting to run

send_user "\nINFO: Starting....\n"

 

if {$argc < 1} {

    send_user "ERROR: ssh_asa-custom_diff <hostname> <commands>\n";

    send_user "ERROR: Must be run from /var/ossec\n";

    exit 1;

}

 

 

# NOTE: this script must be called from within /var/ossec for it to work.

set passlist "agentless/.passlist"

set hostname [lindex $argv 0]

set commands [lrange $argv 1 end]

set pass "x"

set addpass "x"

set timeout 20

 

set lastentry "queue/diff/$hostname-\>ssh_asa-custom_diff/last-entry"

 

if {[string compare $hostname "test"] == 0} {

    if {[string compare $commands "test"] == 0} {

        exit 0;

    }

}

 

# Reading the password list.

if [catch {

    set in [open "$passlist" r]

} loc_error] {

    send_user "ERROR: Password list not present (use \"register_host\" 
first).\n"

    exit 1;

}

 

while {[gets $in line] != -1} {

        set me [string first "|" $line]

        set me2 [string last "|" $line]

        set length [string length $line]

 

        if {$me == -1} {

            continue;

        }

        if {$me2 == -1} {

            continue;

        }

        if {$me == $me2} {

            continue;

        }

 

        set me [expr $me-1]

        set me2 [expr $me2-1]

 

        set host_list [string range $line 0 $me]

        set me [expr $me+2]

        set pass_list [string range $line $me $me2]

        set me2 [expr $me2+2]

        set addpass_list [string range $line $me2 $length]

 

        if {[string compare $host_list $hostname] == 0} {

            set pass "$pass_list"

            set addpass "$addpass_list"

            break

        }

}

close $in

 

 

if {[string compare $pass "x"] == 0} {

    send_user "ERROR: Password for '$hostname' not found.\n"

    exit 1;

}

 

 

# SSHing to the box and passing the directories to check.

# Fix for SSH issue with poor DES cipher and inability to connect.

if [catch {

#    spawn ssh -c des $hostname

    spawn ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 $hostname

} loc_error] {

    send_user "ERROR: Opening connection: $loc_error.\n"

    exit 1;

}

 

expect {

    "WARNING: REMOTE HOST" {

        send_user "ERROR: RSA host key for '$hostname' has changed. Unable 
to access.\n"

        exit 1;

    }

    "*sure you want to continue connecting*" {

        send "yes\r"

        expect "* password:*" {

            send "$pass\r"

 

            expect {

                "Permission denied" {

                    send_user "ERROR: Incorrect password to remote host: 
$hostname .\n"

                    exit 1;

                }

                timeout {

                    send_user "ERROR: Timeout while running on host (too 
long to finish): $hostname .\n"

                    exit 1;

                }

                "*>" {

                    send_user "\nINFO: Starting.\n"

                }

            }

        }

    }

    "ssh: connect to host*" {

        send_user "ERROR: Unable to connect to remote host: $hostname .\n"

        exit 1;

    }

    "no address associated with name" {

        send_user "ERROR: Unable to connect to remote host: $hostname .\n"

        exit 1;

    }

    "*Connection refused*" {

        send_user "ERROR: Unable to connect to remote host: $hostname .\n"

        exit 1;

    }

    "*Connection closed by remote host*" {

        send_user "ERROR: Unable to connect to remote host: $hostname .\n"

        exit 1;

    }

    "* password:*" {

        send "$pass\r"

 

        expect {

            "Permission denied" {

                send_user "ERROR: Incorrect password to remote host: 
$hostname .\n"

                exit 1;

            }

            timeout {

                send_user "ERROR: Timeout while running on host (too long 
to finish): $hostname .\n"

                exit 1;

            }

            "*>" {

                send_user "INFO: Starting.\n"

            }

        }

    }

    timeout {

        send_user "ERROR: Timeout while connecting to host: $hostname . \n"

        exit 1;

    }

}

 

# Going into enable mode.

send "enable\r"

expect {

    "Password:" {

        send "$addpass\r"

 

        expect {

            "*asswor*" {

                send_user "ERROR: Incorrect enable password to remote host: 
$hostname .\n"

                exit 1;

            }

            "*rror in authenticatio*" {

                send_user "ERROR: Incorrect enable password to remote host: 
$hostname .\n"

                exit 1;

            }

            timeout {

                send_user "ERROR: Timeout while going to enable mode on 
host: $hostname .\n"

                exit 1;

            }

            "*#" {

                send_user "\nok on enable pass\n"

            }

        }

    }

    timeout {

        send_user "ERROR: Timeout while running enable on host: $hostname 
.\n"

        exit 1;

    }

}

 

 

 

# Sending commands

set timeout 60

 

###########################################################

# FROM THIS POINT (THE send_user "\nSTORE: now\n" COMMAND)

# UNTIL THE EXIT, ALL OUTPUT IS SAVED.

###########################################################

# Begin storing all stdout

send_user "\nSTORE: now\n"

# Set our terminal pager to 0 so all our command output on the ASA goes by 
without paging

send "term pager 0\r"

expect "*#"

# Show version info, but excluding uptime from the output since it changes 
every time

send "show version | grep -v Configuration last| up\r"

expect "*#"

# Show our running configuration

send "show running-config\r"

expect "*#"

# Send any additional commands sent from our OSSEC config for this 
agentless device

send "$commands\r"

###################################################################################

# BUGFIX - We'll stop storing data before we close our connection because 
we keep

#          getting alerts on changes due to some quirkiness with SSH on the 
ASA.

#          It adds an additional "Connection to..closed by remote host" 
sometimes

#          as well as an additional newline at times.  Added the expect 
"*#" to

#          exit out rather than the EOF, thereby eliminating saving the 
extraneous

#          output that sometimes occurs and gives a false positive for 
changes.

###################################################################################

expect {

   "*#" {

         send_user "\nINFO: Finished at #.\n"

         send "exit\r"

         exit 0;

    }

    timeout {

        send_user "ERROR: Timeout while running commands on host: $hostname 
.\n"

        exit 1;

    }

    eof {

        send_user "\nINFO: Finished at EOF.\n"

        exit 0;

    }

}

 

send_user "ERROR: Unable to finish properly.\n"

exit 1;


On Monday, December 18, 2017 at 10:40:33 PM UTC-5, [email protected] 
wrote:
>
>
> <https://lh3.googleusercontent.com/-Zk7oShbOtHc/WjiJUM68YXI/AAAAAAAAAqk/zl8EVXKWfzcibOdIV569-VakxO44w-SFwCLcBGAs/s1600/Pasted%2BGraphic.tiff>
>
>
> hey guys, I really need u help right now . When i configure the ossec 
> agentless mode, i came cross this problem which is shows 
> <https://lh3.googleusercontent.com/-US62qs3J_-Y/WjiJzB_8shI/AAAAAAAAAqo/WKt0Oj15Dis3uotD58mtq12qBEn9D66aQCLcBGAs/s1600/Pasted%2BGraphic.tiff>
>
>
>
> I really have no idea why this problem came out. And it definitely affect 
> my configuration to monitor cisco switch. Thank u for helping , sincerely
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"ossec-list" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to