Bacchuss WIPS
Transcripción
Bacchuss WIPS
Bacchuss WIPS Análisis de prestaciones y su impacto en escenarios de producción ...................................................................................................................................................................................................................................................... 1. Introducción Bacchuss WIPS es un firewall de aplicaciones Web (WAF) que cumple con todos los requerimientos impuestos por las prácticas de la industria para protección de aplicaciones y servicios Web (OWASP, WASC) y por estándares y regulaciones en el ámbito de seguridad de la información (ISO/IEC 27002, PCI-DSS, SOX, BCRA, etc.). WIPS está soportado por procesos de desarrollo y tecnologías de última generación, involucra conocimiento de una gran comunidad de carácter internacional dedicada específicamente a la protección de recursos Web, y está soportada localmente por un grupo de especialistas en seguridad Web que respalda su operación y permite avanzar en la respuesta a nuevos requerimientos impuestos por el mercado. Una de las cuestiones fundamentales a la hora de considerar la adquisición de un WAF es el impacto que este puede tener en el modelo de negocios objetivo en términos de métricas de eficiencia como tiempos de respuesta, tasa de solicitudes por segundo, entre otros. En este sentido, el dimensionamiento del dispositivo estará estrechamente vinculado con las prestaciones que se deseen obtener considerando los siguientes aspectos fundamentales: • Cantidad de aplicaciones a soportar • Calidad de las aplicaciones (estáticas vs dinámicas) • Modelos de protección (negativo/positivo/mixto) • Cantidad y calidad de reglas de detección Desde la perspectiva del usuario, las acciones llevadas adelante (por el navegador) desde el momento en que se genera una solicitud sobre un recurso web hasta la fase final de recepción del mismo son: 1. Conexión al servidor web 2. Solicitud del recurso deseado 3. Latencia de servicio por parte del servidor (desde la interpretación, hasta el procesamiento y enlazado, hasta el rendering y el inicio de la presentación) 4. Descarga del archivo El impacto de WIPS sobre los tr estará enfocado en la fase 3 identificada arriba, e involucra a todos los procesos necesarios para generar el HTML de respuesta. Un aspecto importante que deberá ser atendido es, como se verá mas adelante, la utilización de memoria RAM por parte del servidor web Apache, componente fundamental de Bacchuss WIPS. En su configuración más típica de funcionamiento conocida como "prefork", Apache inicia un nuevo proceso hijo por cada conexión activa contra el servicio. La consecuencia directa de este modo de funcionamiento es que el número de instancias de Apache crece o decrece linealmente con el número de clientes conectados, y como el consumo total de memoria de Apache depende del número de hijos y de la cantidad de memoria que cada uno de ellos consume, entonces deberá tenerse una idea clara de como WIPS afecta el consumo de memoria en Apache. • Configuración de los componentes núcleo (Apache, etc.) Como en todas las cuestiones técnicas vinculadas a la determinación de parámetros de prestación de un dispositivo, se deben asumir algunas cuestiones que permitan simplificar el problema y a la vez extraer conclusiones relevantes. 3. Escenarios de evaluación 2. Una petición HTTP típica Para la evaluación se utilizarán tres escenarios: Para entender el impacto de WIPS en los tiempos de respuesta (tr) de una aplicación web resulta conveniente comprender la estructura de una petición típica HTTP de tal modo de establecer un escenario base sobre el cuál realizar el análisis y generar hipótesis. Para poder obtener resultados concretos se utilizarán mediciones en un entorno de pruebas con un servidor Apache 2.2.8 el cuál corre sobre un Fedora Linux server (kernel 2.6.25). El hardware es un Intel Xeon 2.33 GHz dual-core processor con 2 GB de RAM. • Ejecución de Apache solo • Ejecución con WIPS, pero sin reglas de detección • Ejecución con WIPS y un conjunto de reglas www.bacchuss.com.ar La reglas de detección de WIPS - The core ruleset (CRS) --num-conn 1000 (inicio de 1000 conexiones en total) El conjunto de reglas de WIPS (OWASP CRS) posee alrededor de 120 reglas por defecto que proveen protección por defecto contra un conjunto de ataques que representan el mayor nivel de riesgo para las aplicaciones web. Algunas de las cuestiones cubiertas por WIPS en sus reglas son: --rate (control de la cantidad de solicitudes por segundo) Respecto a la última opción, 'rate', esta se irá variando para ver las respuestas a las diferentes cargas. A continuación se presenta una salida típica de httperf: • Solicitudes HTTP sospechosas (ejemplo: valores de User-Agent o Accept headers inexistentes) $ ./httperf --hog --server=bytelayer.com --uri • Inyección SQL Total: connections 1000 requests 1000 replies 1000 • Cross-Site Scripting (XSS) /index.html --num-conn 1000 --rate 50 test-duration 20.386 s Connection rate: 49.1 conn/s (20.4 ms/conn, <=30 • Remote code injection concurrent connections) • File disclosure, entre otros. median 404.5 stddev 16.9 La forma de activar o desactivar las reglas será por medio de su inclusión no en el archivo de configuración de Apache (Include camino/a/modsecurity/*.conf). Connection time [ms]: min 404.1 avg 408.2 max 591.3 Connection time [ms]: connect 102.3 Connection length [replies/conn]: 1.000 Request rate: 49.1 req/s (20.4 ms/req) Request size [B]: 95.0 Reply rate [replies/s]: min 46.0 avg 49.0 max 50.0 stddev 2.0 (4 samples) 4. Sobre el método y las herramientas de evaluación El interrogante fundamental en este trabajo es: Reply time [ms]: response 103.1 transfer 202.9 Reply size [B]: header 244.0 content 19531.0 footer 0.0 (total 19775.0) ¿Que efecto tiene WIPS sobre los tiempos de respuesta de aplicaciones web? Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0 para lo que deberán plantearse los siguientes interrogantes: Net I/O: 951.9 KB/s (7.8*10^6 bps) • ¿Que efecto tiene WIPS sobre los tiempos de respuesta de Apache? • ¿Como puede medirse este efecto? CPU time [s]: user 2.37 system 17.14 (user 11.6% system 84.1% total 95.7%) Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0 • ¿Como se debería dimensionar el hardware para WIPS? La manera de medir la diferencia entre los tiempos de respuesta deberá contemplar validez estadística por lo que se realizarán múltiples ensayos y se trabajará finalmente sobre los valores promedio. Esto aísla a los ensayos de posibles desviaciones por procesos propios del sistema operativo como procesamiento intensivo por scheduling, atención de interrupciones, etc. Con el fin de estimular a Bacchuss WIPS se recurrirá a 'httperf' [2], herramienta de benchmarking para servidores HTTP. Httperf permite simular grandes cargas contra servidores y obtener resultados estadísticos sobre el comportamiento de los mismos. Opciones de httperf a utilizar: --hog (utilizar tantos puertos TCP como sea necesario) --uri/index.html (solicitud de recurso) Como puede verse, la salida muestra: • Número de conexiones iniciadas por segundo ("Connection rate"). • Tasa a la cuál se generaron requerimientos sobre el archivo web ("Request rate"). • Tasa de respuesta del servidor en base a su capacidad ("Reply rate"). Además se obtiene información valiosa como: • Tiempo requerido entre el envío del primer byte al servidor y la llegada del primer byte de respuesta ("reply time – response", en este caso 103.1), y • Tiempo total para recibir la respuesta completa desde el servidor ("transfer time", en este caso 202,9). www.bacchuss.com.ar La página estática que se estará utilizando para los ensayos (índex.html) es de tamaño promedio, de 20 KB. Httperf descargará el archivo una única vez por conexión, sin seguir ningún enlace que pueda estar contemplado en el mismo. y sin procesos de uso intensivo de memoria, es posible llegar a situaciones en la que 'top' muestre solo 50 MB. Además, debe considerarse que el consumo de Apache resulta de la sumatoria de los consumos de todos sus hijos aspecto que será profundizado mas adelante en este trabajo. La arquitectura de red utilizada para el ensayo es la de la Figura 1, donde WIPS actúa como punto de choque para todos los requerimientos realizados al servidor web (en este caso una granja de 2 servidores). El siguiente script realizará el trabajo: #!/bin/sh # apache_mem.sh # Calculate the Apache memory usage ps -ef | grep apache2 | awk '{ print $2 }' | xargs pmap -x | grep 'total kB' | awk '{ print $3 }' | awk '{ sum += $1 } END { print sum/1024 MB}' Figura 1: Bacchuss WIPS en escenario de pruebas. Se ejecuta un 'ps' para encontrar todos los hijos de Apache, y se envía el PID de cada uno a 'pmap' para determinar el consumo de memoria. Sobre el resultado se aplica 'awk' para extraer el valor (en MB) para la suma. A continuación se muestra el consumo base de memoria: 5. Mediciones 5.1 Medición base, respuesta de Apache (sin WIPS) Tiempos de respuesta: El servidor entrega el recurso en tiempos promedio de 300 ms hasta que se alcanzan las 75 solicitudes por segundo (sps). A partir de este valor el tiempo se incrementa hasta llegar a 1 s para 500 sps. Uso de memoria: Para la medición de la memoria no puede utilizarse el comando 'top' debido a las características de funcionemainto del sistema operativo que hacen que este consuma de manera permanente todo la memoria libre. Así, para un servidor con varios GB de RAM Apache comienza consumiendo 300 MB de memoria RAM, valor que mantiene estable hasta aproximadamente 150 consultas por segundo. A partir de este punto el crecimiento es muy acentuado, hasta alcanzar un consumo de 2.4 GB para 500 sps, valor que excede a la cantidad de memoria física del servidor cosa que es posible gracias a la arquitectura de memoria virtual de Linux. A partir de los 2GB, el uso de la memoria virtual, que no es otra cosa que el swapping de páginas de memoria al disco rígido, comienza a agravar los retardos debido a los tiempos de acceso a disco. Uso de CPU: En todas las simulaciones, la carga de CPU rondó entre el 1% y el 2%, sin importar la tasa de solicitudes. En este experimento, y en muchos otros relacionados con Apache, se ve que el CPU no es un facto determinante de performance. www.bacchuss.com.ar 5.2 Medición con WIPS, pero sin reglas de detección 5.3 Medición con WIPS y reglas de detección estándar Tiempos de respuesta: En este punto se analizará el tr y el comportamiento de Apache junto a WIPS, pero con carga de reglas de detección basadas en el conjunto estándar de la distribución "core-ruleset" (CRS). En WIPS se han activado las opciones: • SecRequestBodyAccess, y • SecResponseBodyAccess Tiempos de respuesta: En la siguiente imagen se presenta el tiempo de respuesta: directivas que generan una copia temporal intermedia (buffer) de los contenidos de solicitud y respuesta, antes de ser direccionados a destino para su análisis. Si se experimentan retardos en este escenario, será por el almacenamiento temporal intermedio de datos (buffering). La siguiente imagen muestra el tr: Uso de memoria: Puede verse de la gráfica siguiente que el valor de quiebre pasó ahora de 75 a 50 sps. Esto genera una reducción del 33% de la cantidad de sps que WIPS puede manejar. La curva es similar a la del escenario base, hasta 75 sps el tiempo de respuesta es estable mientras que para valores de entre 75 y 350 sps las cosas comienzan a cambiar evidenciándose un crecimiento aceptable. A partir de 350, el crecimiento se proyecta dramáticamente en crecimiento. Uso de memoria: Respecto a la utilización de memoria, el comportamiento también es muy similar al caso base. ¿Que factores pueden estar generando el incremento en los tiempos de respuesta? Puede verse en la última gráfica que a las 50 sps la memoria consumida por Apache comienza a incrementarse dramáticamente hasta alcanzar un valor de 2 GB, valor a partir del cuál se comienza a generar almacenamiento temporal intermedio, hecho que sustentaría la hipótesis del impacto de memoria. Lo que se evidencia es un incremento de 1,3 MB en la cantidad de memoria RAM que utiliza cada hijo de Apache, generándose finalmente una carga de 26 MB extra para el escenario dado (10% del total para el servidor Apache cuando está desocupado). www.bacchuss.com.ar La siguiente gráfica muestra los tiempos de respuesta de WIPS solo, y WIPS con reglas de detección: ¿podría deberse a las directivas RequestBodyAccess y ResponseBodyAccess que generan almacenamiento temporal intermedio (buffering)? 6.1 Comportamiento de tiempos La siguiente gráfica muestra el tiempo de respuesta de WIPS con y sin las opciones RequestBodyAccess y ResponseBodyAccess activas: La siguiente gráfica muestra los consumos de memoria de WIPS solo, y WIPS con reglas de detección: Como puede verse, la eliminación del almacenamiento temporal intermedio mejora las condiciones desplazando de 50 a 75 las solicitudes que WIPS puede manejar antes del problema. Nota: debe tenerse en cuenta que al ser activadas, tanto RequestBodyAccess como ResponseBodyAccess generan la reserva (consumo) de memoria extra. Algunas ideas... Al momento que el servidor alcanza una determinada tasa de sps, el consumo de memoria explota y se incurre en almacenamiento temporal de información (buffering). Alcanzada esta situación, las cosas empeoran aún mas sin control. En un valor de 50 sps, la respuesta de WIPS con reglas es muy similar a la del escenario base por lo que puede establecerse que la inclusión de las reglas no generan un impacto significativo en las prestaciones de Apache ya que hasta ese punto hay disponibilidad de memoria RAM. Este punto es fundamental ya que parece destacar el impacto de la cantidad de memoria RAM como factor limitante de las prestaciones. El efecto de WIPS parecería tener impacto en el desplazamiento del valor en el que se comienza a experimentar la limitación (desde 75 sps a 50 sps, un 33% menos). En base a lo recién expuesto puede concluirse que desactivando RequestBodyAccess y ResponseBodyAccess mejoraría el comportamiento de WIPS, siempre que esto sea viable en base a los requerimientos de protección establecidos. 6.2 Comportamiento de la memoria La siguiente gráfica muestra el consumo de memoria RAM de WIPS con y sin las opciones RequestBodyAccess y ResponseBodyAccess activas: 6. En busca de la causa del cuello de botella La porción de responsabilidad de WIPS en el problema: www.bacchuss.com.ar Tal como era de esperar, se ve que el incremento de memoria con almacenamiento temporal comienza a las 75 solicitudes por segundo. 6.3 Consideraciones sobre las reglas de WIPS Como ha podido verse, la inclusión de las reglas de WIPS generan una alteración en el comportamiento de los tr de Apache debido a la utilización de memoria RAM para el almacenamiento de información temporal intermedia. Existen dos factores sobre los cuales puede trabajarse para mejorar el comportamiento de Apache: • Reducir la cantidad de memoria RAM utilizada por cada proceso de WIPS, y • Incrementar la cantidad de memoria RAM del servidor físico A continuación se avanzará en cuestiones relacionadas con la optimización del uso de memoria de Apache, y de las reglas de WIPS. 7. Optimización de Bacchuss WIPS El estudio anterior muestra que WIPS no genera impacto en el uso de aplicaciones web a menos que incurra en el uso excesivo de memoria RAM, factor directamente vinculado a la tasa de sps, o que se tengan demasiadas reglas de detección en equipos obsoletos. 7.1 Consumo de memoria Reducir el número de reglas de detección tiene impacto positivo directo ya que a mayor número de reglas, mayor consumo de memoria por cada proceso de Apache. De igual modo, cuanto mas reglas hay mayor será el tiempo de ejecución por lo que la ganancia en este punto es doble. 7.2 Sobre las reglas de detección A continuación se presentan algunas cuestiones sobre la configuración y el desarrollo de reglas que pueden tener impacto en WIPS. Evitar la inspección de contenido estático: si se evita la inspección se pueden lograr ganancias importantes, sobre todo para determinadas aplicaciones web que manejan mucho contenido estático como imágenes, binarios, etc. Abajo se muestra un ejemplo de una regla que permite implementar esta excepción: SecRule REQUEST_FILENAME | ".(?:jpe?g|gif|png|js|exe)$" | "phase:1,allow" 7.3 Utilización de @pm y @pmFromFile La utilización de @pm y @pmFromFile puede ofrecer mejoras de tiempo respecto a la rutina estándar de detección de patrones regex en los casos en los que se deba hacer inspección de grandes listas de frases (ej: listas blancas). 7.4 Registro (logging) Al activar las funciones de auditoría y depuración se incurre inexorablemente en un costo por escritura en disco. Respecto al registro de depuración, este es especialmente costoso (especialmente en nivel 9) por lo que solo deberá ser activado en escarnios de prueba o depuración. 7.5 Buen habito de escritura de reglas Hay ciertas cuestiones que garantizan buena prestación al momento de escribir reglas con expresiones regulares (regex). Utilizar paréntesis (non-capturing) siempre que sea posible: es una construcción del tipo "(?: )" que cumple el mismo rol que los paréntesis normales, salvo que usado en el contexto de regexp evita la utilización de referencias hacia atrás (backreferences) y por consiguiente la utilización de memoria extra También salva procesamiento extra. Utilizar una única expresión regular siempre que sea posible: es mejor usar una única regexp que varias mas chicas. Por ejemplo, la regla: SecRule REQUEST_FILENAME | ".(?:exe|bat|pif)" deny será mas eficiente que la definición de una única reglas por formato. 8. Análisis de prestaciones del servidor web Apache A continuación se analizará una serie de aspectos que pueden afectar de manera significativa las prestaciones del servidor web Apache, y se avanzará en soluciones que pueden ser implementadas para mejorar los tr. Hay dos lineas generales sobre las cuales avanzar: • Cuestiones vinculadas con el hardware • Cuestiones de configuración y ejecución • Cuestiones vinculadas a la compilación www.bacchuss.com.ar 8.1 Cuestiones vinculadas al hardware La principal característica de hardware que puede impactar en la prestaciones de Apache es la cantidad de memoria RAM del servidor físico sobre el que se ejecuta [3]. Apache no deberá, bajo ninguna circunstancia, utilizar memoria swap (almacenamiento de memoria temporal intermedia en disco) ya que se incrementará el tr hasta valores que pueden comenzar a resultar inaceptables para los usuarios. Mas RAM tengamos disponible en hardware, mejor! Para optimizar el uso de la memoria RAM se deberá hacer uso de la directiva 'MaxClients' que para el caso de servidores de tipo "non-threaded" (ej: prefork) permite limitar el número de procesos hijos creados para atender a las peticiones (valor por defecto 256) [4]. En este sentido, el número máximo de hijos deberá ser fijado de tal modo que se consuma toda la memoria RAM física disponible en el servidor, no más. La fórmula para determinar el valor de 'MaxClients' es: MaxClients = (RAM total − RAM para OS − RAM para otros procesos) / RAM por proceso httpd/apache2 Los valores de consumos pueden ser determinados por medio de la utilización de los comandos: • 'ps -ylC httpd --sort:rss': determinación del tamaño del proceso, se debe dividir por 1024 para obtener el resultado en MB. También se pude probar 'top'. • 'free -m': para obtener una vista general. La clave es observar el valor de buffers/cache utilizado. • 'vmstat 2 5': muestra el número de procesos en estado "runnable", "blocked", y "waiting"; y los valores de "swap in" y "swap out". Mas allá de la memoria están las cuestiones asociadas al resto de los componentes, que cuanto más rápidos, mejor! (CPU, Disco, Red). 8.2 Cuestiones de configuración y ejecución Resolución de nombres (DNS) Apache cuenta con una directiva que permite utilizar ACLs de tipo: Para su funcionamiento, el servidor realiza una consulta DNS por cada solicitud que llega incurriendo en costo extra. De no ser utilizada, esta opción deberá ser desactivada [5]. Creación de procesos En su funcionamiento original hasta la versión 1.3, Apache requería de un tiempo considerable para responder al incremento de sps ya que solo se generaba un nuevo hijo por segundo para preservar la estabilidad del sistema. En este escenario, si el valor de la directiva 'StartServers' [6] era definida con un valor 5, entonces se requerirían 95 segundos para alcanzar la cantidad de hijos necesaria para responder a la carga. Este modo de funcionamiento tuvo tal efecto en la prestación percibida por las herramientas de benchmarking que debió ser cambiado. A partir de la versión 1.3, Apache genera un hijo al inicio, de ser necesario genera 2 mas y espera 1 segundo, luego crea 4 mas y espera otro segundo, luego 8, y así sucesivamente en base exponencial para responder a la carga hasta alcanzar un valor máximo de 32 hijos creados por segundo. En este nuevo modo, la creación de hijos se detiene en el momento que se alcanza el valor definido por 'MinSpareServers'. Este valor debe ser considerado en servidores realmente demandados ya que tiene implicancias que pueden afectar la estabilidad. En los casos en que mas de 4 hijos sean generados por segundo se genera un aviso en el 'ErrorLog' [8]. Igual de importante que el proceso de creación es el de muerte de los hijos de Apache, aspecto manejado por la directiva 'MaxRequestsPerChild' [9]. Esta directiva define el número de solicitudes que manejará un hijo durante su tiempo de vida (el valor 0 implica que el hijo jamás expirará, en algunas configuraciones por defecto el valor puede ser 10000). Esta directiva permite proteger al sistema contra consumo excesivo de memoria RAM por causa de goteos (leak). Lo recomendado es probar con valores altos e ir ajustando hacia abajo. Un tercer aspecto importante en el contexto de hijos de Apache es la utilización de 'Keep-Alives" que hacen que estos queden a la espera de mas solicitudes sobre conexiones establecidas con la correspondiente pérdida de recursos. Este factor es manejado por medio de la directiva 'KeepAliveTimeout' [10] que permite establecer el tiempo que un hijo esperará por solicitudes en una conexión persistente. En su valor por defecto de 5 s intenta minimizar este efecto de espera. • Allow from domain, o • Deny from domain www.bacchuss.com.ar Ejemplo: utilizado en escenarios de gran demanda ya que utiliza menor cantidad de memoria que la alternativa. Sistema: CentOS 4.4, con 128MB RAM Apache: v2.0, mpm_prefork, mod_php, mod_rewrite, mod_ssl, y otros modulos Otros Servicios: MySQL, Bind Memoria del sistema reportada: 120MB Tamaño del proceso httpd: 7-13MB Memoria disponible para Apache: 90MB • "MPM prefork": modelo que hace uso de múltiples hijos cada uno de los cuales posee un único hilo de ejecución. Cada hijo maneja una conexión por vez, y en general aunque es comparable en velocidad al modelo worker, utiliza mayor cantidad de memoria RAM. Es de especial interés para escenarios donde se requiere gran estabiliu]dad o funcionalidad de depuración avanzada debido a la existencia de un único hilo de ejecución por conexión. Abajo se presentan algunas configuraciones por defecto: En base a los valores reportados, la configuración podría ser: StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 15 MaxClients 15 MaxRequestsPerChild 2000 Separación de contenidos estáticos vs dinámicos Debe desalentarse la mezcla de contenido dinámico y estático para un mismo servidor web. Un proceso Apache sirviendo contenido dinámico puede utilizar entre 3 y 20 MB de memoria RAM, tamaño que se irá ajustando en relación al contenido servido. El problema es que una vez finalizado el servicio de un determinado contenido, el tamaño del proceso nunca se reduce, hasta el momento en el que este muere finalmente. Un ejemplo de esto lo constituye el caso en el que un proceso utiliza 20 MB para servir un contenido PHP, y luego en mismo proceso recibe una solicitud por ua imágen, recurso que podría ser servido con un consumo asociado de memoria de 1 MB. En este sentido, WIPS funciona como un servidor-pequeño que contiene compilados de manera estática los procesos indispensables sirviendo de front-end a las aplicaciones donde se encuentra el contenido activo. 8.3 Cuestiones vinculadas a la compilación Módulos para modelos de concurrencia (MPM) [11] Apache soporta diferentes módulos para modelos de concurrencia ("Multi-Processing Modules" o MPMs) cuya selección tendrá impacto en la velocidad y escalablidad del servidor. • "MPM worker": modelo que utiliza múltiples hijos, con múltiples hilos de ejecución en cada uno de ellos. Cada hilo se encarga de manejar una conexión por vez. Este modelo es <IfModule prefork.c> StartServers MinSpareServers MaxSpareServers MaxClients MaxRequestsPerChild </IfModule> 8 5 20 150 1000 <IfModule worker.c> StartServers MaxClients MinSpareThreads MaxSpareThreads ThreadsPerChild MaxRequestsPerChild </IfModule> 2 150 25 75 25 0 Módulos Debido a que el consumo de memoria es el factor clave para lograr buenas prestaciones, es fundamental eliminar todo módulo que no sea necesario para el funcionemiento del sistema. Si los módulos se encuentran cargados como "Dynamic Shared Object" (DSO), entonces su eliminación resulta muy simple por medio de la utilización de la directiva 'LoadModule'. Si por otro lado, existen módulos compilados de manera estática en el demonio httpd, entonces deberá procederse a su recompilación. Una lista mínima de módulos requeridos es: • mod_mime • mod_dir Operaciones atómicas Algunos módulos como mod_cache y algunas versiones de desarrollo de MPM worker utilizan la API APR, utilizada para optimizar las operaciones de sincronización de hilos (threats). APR implementa esto en base a los mecanismos implementados en la www.bacchuss.com.ar CPU como por ejemplo "compare-and-swap" implememntado directamente en hardware. (CAS) mod_status y ExtendedStatus On Si se utiliza el módulo 'mod_status' y se configura 'ExtendedStatus On' entonces por cada solicitud Apache realizará dos llamadas a 'gettimeofday(2)', y varias llamadas mas a 'time(2)'. Para configuraciones de altas prestaciones se debe configurar la directiva 'ExtendedStatus off'. 9. Conclusiones El estudio mostró que la principal variable de afectación de los tiempos de respuesta (tr) de WIPS la constituye la cantidad de memoria RAM presente en el hardware, y el consumo de la misma por parte de los diferentes componentes de la solución, principalmente Apache. Se ha podido mostrar que el tr comienza a evidenciar deterioros cuando la cantidad de hijos de Apache alcanzan un número suficiente como para consumir el total de memoria RAM disponible. Sumado al consumo natural de memoria RAM de los hijos de apache involucrados en el servicio de solicitudes se destaca el consumo vinculado a las rutinas de detección de WIPS que generan almacensmiento temporal intermedio (buffering) para dar soporte a sus modelos de protección. Un tercer aspecto que debe ser tenido en cuenta es la correcta configuración y compilación de los binarios de los componentes centrales ya que tienen también un gran impacto en la solución final. En base a lo expuesto, será de gran importancia la determinación de la cantidad de memoria correcta que deberá poseer el hardware, así como la correcta compilación y configuración de los diversos componentes de WIPS. Con respecto a la influencia de la capacidad de procesamiento (CPU), este comienza a ser relevante a partir del momento en el que se consideren rutinas de detacción intensivas en WIPS, sobre todo mediante el desarrollo de modelos positivos de seguridad en el que se hace gran uso de acceso a variables y a rutinas de detección por medio de expresiones regulares (regexp), detección de patrones (pm), etc. Finalmente, y por la experiencia ganada en proyectos de producción sobre este tipo de soluciones, se deberá contar con interfaces de red que permitan alcanzar el máximo potencial sin que estas se conviertan en el cuello de botella. Además será un factor determinante la cantidad de aplicaciones que se deberán soportar a soportar, y la calidad de estas con respecto al tipo de contenidos (estáticas vs dinámicas). www.bacchuss.com.ar Referencias: [1] "Ways to improve performance of your server in ModSecurity 2.5" http://www.packtpub.com/article/ways-improve-performance-s erver-in-modsecurity2.5 [2] httperf http://www.hpl.hp.com/research/linux/httperf/ [3] Apache 2.2 Performance Tuning http://httpd.apache.org/docs/2.2/misc/perf-tuning.html [4] Apache 2.2 MaxClients Directive http://httpd.apache.org/docs/2.2/mod/mpm_common.html#ma xclients [5] Apache 2.2 HostnameLookups Directive http://httpd.apache.org/docs/2.2/mod/core.html#hostnamelook ups [6] Apache 2.2 StartServers Directive http://httpd.apache.org/docs/2.2/mod/mpm_common.html#sta rtservers [7] Apache 2.2 MinSpareServers Directive http://httpd.apache.org/docs/2.2/mod/prefork.html#minsparese rvers [8] Apache 2.2 ErrorLog Directive http://httpd.apache.org/docs/2.2/mod/core.html#errorlog [9] Apache 2.2 MaxRequestsPerChild Directive http://httpd.apache.org/docs/2.2/mod/mpm_common.html#ma xrequestsperchild [10] Apache 2.2 KeepAliveTimeout Directive http://httpd.apache.org/docs/2.2/mod/core.html#keepalivetime out [11] Apache 2.2 Compile-Time Configuration Issues http://httpd.apache.org/docs/2.2/misc/perf-tuning.html#compil etime www.bacchuss.com.ar Bacchuss Contactos ...................................................................................................................................................................................................................................................... HQ-SI Sarmiento 537 PB B HQ-TI Sarmiento 537 PB Rosario - Santa Fe - Argentina +54 341 5271213 Rosario - Santa Fe - Argentina +54 341 5271214 http://www.bacchuss.com.ar [email protected] http://www.bacchuss.com.ar/TI [email protected] Sobre BACCHUSS ® Fundada en el año 2001, BACCHUSS ® se ha convertido en una empresa líder en Servicios de Consultoría en Seguridad de la Información en Argentina brindando una serie de productos y servicios destinados a proteger la infraestructura crítica para corporaciones privadas y para organizaciones gubernamentales y del estado, tomando siempre como base estándares internacionales y prácticas recomendadas en la materia. Las oficinas de BACCHUSS ® se encuentran en la ciudad de Rosarios, Santa Fe, Argentina; desde donde se desarrollan las soluciones y se opera con todos los clientes. Todos los derechos reservados. BACCHUSS y el Logo de BACCHUSS son marcas registradas. Copyright © 2001-2012, BACCHUSS. www.bacchuss.com.ar