Instrucciones para crear un honey pot manualmente en linux centos 5.1 Apache+mysql+php
El objetivo es construir una trampa para cazar robots de hackeo en internet por puerto SSH, o puerto 22.
El codigo es el siguiente:
Yo lo llamo /var/ww/html/honeypot01.php
<?
function Conectarse()
{
if (!($conexion=mysql_connect("192.168.1.153","coloqueusuarioaqui","coloquepasswordaqui")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!($p_base =mysql_select_db("honeypot",$conexion)))
{
mysql_error($p_base);
echo "Error seleccionando la base de datos.";
exit();
}
return $conexion;
}
?>
<html>
<head>
<title>Honeypot en php</title>
</head>
<body>
<BR><BR>
<?php
$conexion=Conectarse();
$cadena6=("TRUNCATE TABLE `ip_accepted`;");
$resultado6=mysql_query($cadena6,$conexion) or die($cadena6 . "La consulta fallo;: " . mysql_error());
$gestor = fopen("/var/log/secure", "r");
$aux=0;
if ($gestor) {
while (!feof($gestor))
{
$respuesta= fgets($gestor, 32000);
//Apr 23 14:30:13 localhost sshd[21719]: Failed password for root from 221.194.128.66 port 57377 ssh2
$respuesta=str_replace("[","", $respuesta);
$respuesta=str_replace("]","", $respuesta);
$respuesta=str_replace(" "," ", $respuesta);
$usuario="";
$descripcion="";
$ip="";
$fecha="";
printf ("la linea para estudiar es: %s",$respuesta);
//May 3 04:02:09 localhost sshd11761: Invalid user anupa from 194.187.205.123
if ( eregi( "([a-zA-Z]{3}) ([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}) ([localhost]{9}) ([sshd]{4})([0-9]{1,5}):([ Invalid]{8}
) ([user]{4}) ([0-9a-zA-Z]{1,20}) ([from]{4}) ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})", $respuesta, $regs ) ) {
$fecha="2009-".$regs[1]."-".$regs[2]." ".$regs[3].":".$regs[4].":".$regs[5];
$fecha = date("09-m-d H:i:s", strtotime($fecha));
$usuario=$regs[11];
$ip=$regs[13].".".$regs[14].".".$regs[15].".".$regs[16];
$port="sin determinar";
$descripcion="Failed password";
printf("fecha %s\n",$fecha);
printf("usuarios %s\n",$usuario);
printf("ip %s\n",$ip);
printf("port %s\n",$port);
}
if ( eregi( "([a-zA-Z]{3}) ([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}) ([Invalid]{7}) ([user]{4}) ([0-9a-zA-Z]{1,20}) ([from]{
4}) ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})", $respuesta, $regs ) ) {
$fecha="2009-".$regs[1]."-".$regs[2]." ".$regs[3].":".$regs[4].":".$regs[5];
$fecha = date("09-m-d H:i:s", strtotime($fecha));
$usuario=$regs[9];
$ip=$regs[11].".".$regs[12].".".$regs[13].".".$regs[14];
$port=$regs[16];
$descripcion="Failed password";
printf("fecha %s\n",$fecha);
printf("usuarios %s\n",$usuario);
printf("ip %s\n",$ip);
printf("port %s\n",$port);
}
if ( eregi( "([a-zA-Z]{3}) ([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}) ([a-zA-Z]{1,12}) ([a-zA-Z0-9]{7,10}):([ Failed password for]{20}) ([a-zA-Z0-9]{1,12}) ([from]{4}) ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}) ([port]{4}) ([0-9]{1,10}) ", $respuesta, $regs ) ) {
$fecha="2009-".$regs[1]."-".$regs[2]." ".$regs[3].":".$regs[4].":".$regs[5];
$fecha = date("09-m-d H:i:s", strtotime($fecha));
$usuario=$regs[9];
$ip=$regs[11].".".$regs[12].".".$regs[13].".".$regs[14];
$port=$regs[16];
$descripcion="Failed password";
printf("fecha %s\n",$fecha);
printf("usuarios %s\n",$usuario);
printf("ip %s\n",$ip);
printf("port %s\n",$port);
}
//Segundo caso para el parser:
//Apr 20 15:28:55 localhost sshd[7380]: Accepted password for root from 190.25.138.206 port 11487 ssh2
if ( eregi( "([a-zA-Z]{3}) ([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}) ([a-zA-Z]{1,12}) ([a-zA-Z0-9]{7,10}):([ Accepted password for]{22}) ([a-zA-Z0-9]{1,12}) ([from]{4}) ([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}) ([port]{4}) ([0-9]{1,10}) ", $respuesta, $regs ) ) {
$fecha="2009-".$regs[1]."-".$regs[2]." ".$regs[3].":".$regs[4].":".$regs[5];
$fecha = date("09-m-d H:i:s", strtotime($fecha));
$usuario=$regs[9];
$ip=$regs[11].".".$regs[12].".".$regs[13].".".$regs[14];
$port=$regs[16];
$descripcion="Accepted password";
printf("fecha %s\n",$fecha);
printf("usuarios %s\n",$usuario);
printf("ip %s\n",$ip);
printf("port %s\n",$port);
}
$token=0;
if ($usuario=='') {printf("cadena vacia %s \n",$usuario);$token=1;}
if ($descripcion=='') { printf("cadena vacia %s\n",$descripcion); $token=1;}
if ($ip=='') { printf("cadena vacia %s\n",$ip); $token=1;}
if ($fecha=='') {printf("cadena vacia %s\n",$fecha); $token=1;}
if ($token==0)
{
$cadena=(" SELECT * FROM `acceso_honeypot` WHERE `usuario` LIKE CONVERT( _utf8 '$usuario' USING latin1 )
COLLATE latin1_swedish_ci
AND `descripcion` LIKE CONVERT( _utf8 '$descripcion'
USING latin1 )
COLLATE latin1_swedish_ci
AND `ip` LIKE CONVERT( _utf8 '$ip'
USING latin1 )
COLLATE latin1_swedish_ci
AND `fecha_hora` = '$fecha';");
// echo $cadena;
$resultado=mysql_query($cadena,$conexion) or die($cadena . "La consulta fallo;: " .mysql_error());
$fila=mysql_fetch_array($resultado);
if ($fila) {echo "no se debe hacer el insert";}
else
{
$cadena5=("
INSERT INTO `servicios3`.`acceso_honeypot` (
`index` ,
`usuario` ,
`descripcion` ,
`ip` ,
`fecha_hora`
)
VALUES (
NULL , '$usuario', '$descripcion', '$ip', '{$fecha}');");
// echo $cadena5;
// INSERT INTO `servicios3`.`acceso_siaf` ( `index` , `usuario` , `descripcion` , `ip` , `fecha_hora` )
// VALUES ( NULL , '$usuario','$descripcion', '$ip', '{$fecha_log}');");
$resultado5=mysql_query($cadena5,$conexion) or die($cadena5 . "La consulta fallo;: " . mysql_error());
}
}
}//fin del while
}//fin del if ($gestor)
fclose ($gestor);
//}
// $cadena02= "SELECT count( `ip_accepted` ) AS `contador_ip`, `usuario`,`ip_accepted` FROM `ip_accepted` GROUP BY `ip_accepted` ORDER BY `usuari
o`;";
// echo $cadena02;
// $resultado02=mysql_query($cadena02,$conexion) or die($cadena02 . "La consulta fallo;: " . mysql_error());
// while ($fila02=mysql_fetch_array($resultado02))
// {
// echo $fila02['contador_ip']." ".$fila02['usuario']." ".$fila02['ip_accepted']."<br>";
// }
?>
</body>
</html>
La estructura de la base de datos es:
Cree la base de datos llamada "honeypot" - en mysql como pueda: por ejemplo por linea de comando o puede ser por phpmyadmin
y luego cree esta tabla.
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 30-06-2009 a las 11:09:35
-- Versión del servidor: 5.0.51
-- Versión de PHP: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de datos: `servicios3`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `acceso_honeypot`
--
CREATE TABLE `acceso_honeypot` (
`index` int(11) NOT NULL auto_increment,
`usuario` varchar(50) NOT NULL,
`descripcion` varchar(200) NOT NULL,
`ip` varchar(20) NOT NULL,
`fecha_hora` datetime NOT NULL,
PRIMARY KEY (`index`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
El programa en php para analizar la informacion es:
llamelo acceso_honey_pot.php
<?
function Conectarse()
{
if (!($conexion=mysql_connect("192.168.1.153","servicios2","")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!($p_base =mysql_select_db("servicios3",$conexion)))
{
mysql_error($p_base);
echo "Error seleccionando la base de datos.";
exit();
}
return $conexion;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Divisi�n de Informatica</title>
<script src="lib/prototype.js" type="text/javascript"></script>
<script src="src/scriptaculous.js" type="text/javascript"></script>
<script src="src/unittest.js" type="text/javascript"></script>
</head>
<body>
<?php
$fecha_inicial=$_GET["fechainicial"];
$fecha_final=$_GET["fechafinal"];
// $fecha_final="2007/04/01";
// $fecha_final="2010/04/30";
$conexion=Conectarse();
//$cadena02= "SELECT count( `ip` ) AS `contador_ip` , `descripcion` , `ip` FROM `acceso_honeypotf` GROUP BY `ip` , `descripcion` ORDER BY `ip`;";
$cadena02= "SELECT count( `ip` ) AS `contador_ip` , `descripcion` , `ip` FROM `acceso_honeypot` WHERE `fecha_hora` > '$fecha_inicial' and `fecha_hora` < '$fecha_final' GROUP BY `ip`,`descripcion` ORDER BY `ip`, `descripcion`;";
// echo $cadena02;
$resultado02=mysql_query($cadena02,$conexion) or die($cadena02 . "La consulta fallo;: " . mysql_error());
while ($fila02=mysql_fetch_array($resultado02))
{
$ip=$fila02['ip'];
$descripcion=$fila02['descripcion'];
print ("<table>");
$IP_Principal= "<tr>"."<td width=30>".$fila02['contador_ip']."</td><td width=160>".$fila02['descripcion']."</td><td width=160>".$fila02['ip']."</td></tr>";
echo "<h1>".$IP_Principal."</h1>";
print ("</table>");
if (stristr($descripcion, 'Failed') == TRUE)
{
$descripcion="Failed";
}
$id=$ip.$descripcion;
//echo $id."<br>";
printf ("<a href=# onclick=Effect.toggle('%s','blind'); return false;> %s :<br></a>",$id,"Analisis");
printf ( "<div id='%s' style=display:none;>",$id);
$cadena03= "SELECT * FROM `acceso_honeypot` WHERE `descripcion` LIKE CONVERT( _utf8 '%Accepted%' USING latin1 ) COLLATE latin1_swedish_ci AND `ip` LIKE CONVERT( _utf8 '$ip' USING latin1 ) COLLATE latin1_swedish_ci and `fecha_hora` > '$fecha_inicial' and `fecha_hora` < '$fecha_final'" ;
$resultado03=mysql_query($cadena03,$conexion) or die($cadena03 . "La consulta fallo;: " . mysql_error());
//print ("<tr>");
printf("<form action=acceso_honey_pot04.php method=POST>");
print ("<table>");
while ($fila03=mysql_fetch_array($resultado03))
{
// echo "<tr>"."<td>".$fila03['usuario']."</td><td>".$fila03['descripcion']."</td><td>".$fila03['ip']."</td>"."<td>".$fila03['fecha_hora']."</td>"."</tr>";
echo "<tr>"."<td>".$fila03['usuario']."</td><td>".$fila03['descripcion']."</td><td>".$fila03['ip']."</td>"."<td>".$fila03['fecha_hora']."</td>"."</tr>";
}
print ("</table>");
printf("</form>");
$cadena04= "SELECT * FROM `acceso_honeypot` WHERE `descripcion` LIKE CONVERT( _utf8 '%Failed%' USING latin1 ) COLLATE latin1_swedish_ci AND `ip` LIKE CONVERT( _utf8 '$ip' USING latin1 ) COLLATE latin1_swedish_ci and `fecha_hora` > '$fecha_inicial' and `fecha_hora` < '$fecha_final'" ;
// echo $cadena03;
$resultado04=mysql_query($cadena04,$conexion) or die($cadena04 . "La consulta fallo;: " . mysql_error());
//print ("<tr>");
printf("<form action=acceso_siaf02.php method=POST>");
print ("<table>");
while ($fila04=mysql_fetch_array($resultado04))
{
// echo "<tr>"."<td>".$fila03['usuario']."</td><td>".$fila03['descripcion']."</td><td>".$fila03['ip']."</td>"."<td>".$fila03['fecha_hora']."</td>"."</tr>";
echo "<tr>"."<td>".$fila04['usuario']."</td><td>".$fila04['descripcion']."</td><td>".$fila04['ip']."</td>"."<td>".$fila04['fecha_hora']."</td>"."</tr>";
}
print ("</table>");
printf("</form>");
echo "</div>";
//print ("</tr>");
}
print ("</table>");
?>
</body>
</html>
$resultado03=mysql_query($cadena03,$conexion) or die($cadena03 . "La consulta fallo;: " . mysql_error());
//print ("<tr>");
printf("<form action=acceso_honey_pot04.php method=POST>");
print ("<table>");
while ($fila03=mysql_fetch_array($resultado03))
{
// echo "<tr>"."<td>".$fila03['usuario']."</td><td>".$fila03['descripcion']."</td><td>".$fila03['ip']."</td>"."<td>".$fila03['fecha_hora']."</td>"."</tr>";
echo "<tr>"."<td>".$fila03['usuario']."</td><td>".$fila03['descripcion']."</td><td>".$fila03['ip']."</td>"."<td>".$fila03['fecha_hora']."</td>"."</tr>";
}
print ("</table>");
printf("</form>");
$cadena04= "SELECT * FROM `acceso_honeypot` WHERE `descripcion` LIKE CONVERT( _utf8 '%Failed%' USING latin1 ) COLLATE latin1_swedish_ci AND `ip` LIKE CONVERT( _utf8 '$ip' USING latin1 ) COLLATE latin1_swedish_ci and `fecha_hora` > '$fecha_inicial' and `fecha_hora` < '$fecha_final'" ;
// echo $cadena03;
$resultado04=mysql_query($cadena04,$conexion) or die($cadena04 . "La consulta fallo;: " . mysql_error());
//print ("<tr>");
printf("<form action=acceso_siaf02.php method=POST>");
print ("<table>");
while ($fila04=mysql_fetch_array($resultado04))
{
// echo "<tr>"."<td>".$fila03['usuario']."</td><td>".$fila03['descripcion']."</td><td>".$fila03['ip']."</td>"."<td>".$fila03['fecha_hora']."</td>"."</tr>";
echo "<tr>"."<td>".$fila04['usuario']."</td><td>".$fila04['descripcion']."</td><td>".$fila04['ip']."</td>"."<td>".$fila04['fecha_hora']."</td>"."</tr>";
}
print ("</table>");
printf("</form>");
echo "</div>";
//print ("</tr>");
}
print ("</table>");
?>
</body>
</html>
ahora para realizar las consultas cree el programa:
llame a este programa acceso_honey_pot04.php
<?
function Conectarse()
{
if (!($conexion=mysql_connect("192.168.1.219","root","aw321bjr")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!($p_base =mysql_select_db("servicios3",$conexion)))
{
mysql_error($p_base);
echo "Error seleccionando la base de datos.";
exit();
}
return $conexion;
}
?>
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
<title>Acceso Siaf</title>
</head>
<body>
<BR><BR>
<title>Division de Informatica</title>
<SCRIPT LANGUAGE="JavaScript" SRC="CalendarPopup.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
var cal = new CalendarPopup();
</SCRIPT>
</head>
<body>
<table width="100%" border="10" cellspacing="10" cellpadding="2">
<tbody>
<form name="acceso_siaf" action="acceso_siaf03.php" method="GET">
<INPUT TYPE="text" NAME="fechainicial" VALUE="" SIZE=25>
<A HREF="#"
onClick="cal.select(document.forms['acceso_siaf'].fechainicial,'anchor1','yyyy/MM/dd'); return false;"
NAME="anchor1" ID="anchor1">Seleccione fecha de inicio</A><br><br>
<INPUT TYPE="text" NAME="fechafinal" VALUE="" SIZE=25>
<A HREF="#"
onClick="cal.select(document.forms['acceso_siaf'].fechafinal,'anchor1','yyyy/MM/dd'); return false;"
NAME="anchor1" ID="anchor1">Seleccione fecha final</A>
<input type="submit" name="boton_ace" value="Buscar">
</FORM>
</tbody>
</table>
</body>
finalmente para correr el programa escriba:
cd /var/ww/html
php honeypot01.php
Y para ver los resultados entre via web a:
http://localhost/acceso_honey_pot.php