From e217076352fdd6c247c182ecdcfc075681f2e19b Mon Sep 17 00:00:00 2001 From: usmannasir <01-134132-158@student.bahria.edu.pk> Date: Wed, 4 Apr 2018 02:17:12 +0500 Subject: [PATCH] OWASP and Comodo initial integration. --- backup/views.py | 2 +- baseTemplate/views.py | 2 +- filemanager/templates/filemanager/index.html | 2 +- firewall/static/firewall/firewall.js | 185 ++++++++++++- firewall/templates/firewall/modSecurity.html | 1 + .../firewall/modSecurityRulesPacks.html | 113 ++++++++ firewall/urls.py | 10 +- firewall/views.py | 106 ++++++++ install/install.py | 8 +- loginSystem/views.py | 2 +- plogical/backupUtilities.py | 1 + plogical/modSec.py | 248 +++++++++++++++++- static/firewall/firewall.js | 185 ++++++++++++- 13 files changed, 847 insertions(+), 18 deletions(-) create mode 100644 firewall/templates/firewall/modSecurityRulesPacks.html diff --git a/backup/views.py b/backup/views.py index 8e6ec1c2c..14edb5c4e 100644 --- a/backup/views.py +++ b/backup/views.py @@ -1225,7 +1225,7 @@ def submitRemoteBackups(request): Version = version.objects.get(pk=1) - if data['currentVersion'] == Version.currentVersion and data['build'] == Version.build: + if data['currentVersion'] == Version.currentVersion and data['build'] >= 0: pass else: data_ret = {'status': 0, diff --git a/baseTemplate/views.py b/baseTemplate/views.py index ef9da75e8..14351dbba 100644 --- a/baseTemplate/views.py +++ b/baseTemplate/views.py @@ -57,7 +57,7 @@ def getAdminStatus(request): logging.CyberCPLogFileWriter.writeToFile("Failed to read machine IP, error:" +str(msg)) serverIPAddress = "192.168.100.1" - adminName = administrator.firstName + " " + administrator.lastName[0] + adminName = administrator.firstName + " " + administrator.lastName[:3] adminData = {"admin_type":admin_type,"user_name":adminName,"serverIPAddress":serverIPAddress} diff --git a/filemanager/templates/filemanager/index.html b/filemanager/templates/filemanager/index.html index 7e94e10e3..f6dad04ea 100644 --- a/filemanager/templates/filemanager/index.html +++ b/filemanager/templates/filemanager/index.html @@ -18,7 +18,7 @@ - + diff --git a/firewall/static/firewall/firewall.js b/firewall/static/firewall/firewall.js index 73996960b..271af3a44 100644 --- a/firewall/static/firewall/firewall.js +++ b/firewall/static/firewall/firewall.js @@ -745,7 +745,7 @@ app.controller('secureSSHCTRL', function($scope,$http) { function ListInitialDatas(response) { - if(response.data.delete_status == 1){ + if(response.data.delete_status === 1){ $scope.secureSSHLoading = true; $scope.keyDeleted = false; populateCurrentKeys(); @@ -789,7 +789,7 @@ app.controller('secureSSHCTRL', function($scope,$http) { function ListInitialDatas(response) { - if(response.data.add_status == 1){ + if(response.data.add_status === 1){ $scope.secureSSHLoading = true; $scope.saveKeyBtn = true; $scope.showKeyBox = false; @@ -1236,4 +1236,185 @@ app.controller('modSecRules', function($scope, $http) { }); + +/* Java script code for ModSec */ + +app.controller('modSecRulesPack', function($scope, $http, $timeout, $window) { + + $scope.modsecLoading = true; + $scope.owaspDisable = true; + $scope.comodoDisable = true; + + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = true; + $scope.installationFailed = true; + $scope.installationSuccess = true; + + ///// ModSec configs + + var owaspInstalled = false; + var comodoInstalled = false; + var counterOWASP = 0; + var counterComodo = 0; + + + $('#owaspInstalled').change(function() { + counterOWASP = counterOWASP + 1; + owaspInstalled = $(this).prop('checked'); + + + if(counterOWASP > 2) { + if (owaspInstalled === true) { + installModSecRulesPack('installOWASP'); + } else { + installModSecRulesPack('disableOWASP') + } + } + }); + + $('#comodoInstalled').change(function() { + + counterComodo = counterComodo + 1; + comodoInstalled = $(this).prop('checked'); + + if(counterComodo > 2) { + + if (comodoInstalled === true) { + installModSecRulesPack('installComodo'); + } else { + installModSecRulesPack('disableComodo') + } + } + + }); + + + getOWASPAndComodoStatus(); + function getOWASPAndComodoStatus(){ + + $scope.modsecLoading = false; + + $('#owaspInstalled').bootstrapToggle('off'); + $('#comodoInstalled').bootstrapToggle('off'); + + url = "/firewall/getOWASPAndComodoStatus"; + + var data = {}; + + var config = { + headers : { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + + $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + $scope.modsecLoading = true; + + if(response.data.modSecInstalled === 1){ + + if (response.data.owaspInstalled === 1) { + $('#owaspInstalled').bootstrapToggle('on'); + $scope.owaspDisable = false; + }else{ + $('#owaspInstalled').bootstrapToggle('off'); + $scope.owaspDisable = true; + } + if (response.data.comodoInstalled === 1) { + $('#comodoInstalled').bootstrapToggle('on'); + $scope.comodoDisable = false; + }else{ + $('#comodoInstalled').bootstrapToggle('off'); + $scope.comodoDisable = true; + } + + } + + } + function cantLoadInitialDatas(response) { + $scope.modsecLoading = true; + } + + } + + ///// + + function installModSecRulesPack(packName) { + + $scope.modsecLoading = false; + + + + url = "/firewall/installModSecRulesPack"; + + var data = { + packName:packName + }; + + var config = { + headers : { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + $scope.modsecLoading = true; + + if(response.data.installStatus === 1){ + + $scope.modsecLoading = true; + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = true; + $scope.installationFailed = true; + $scope.installationSuccess = false; + + $timeout(function() { $window.location.reload(); }, 3000); + + }else{ + $scope.modsecLoading = true; + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = true; + $scope.installationFailed = false; + $scope.installationSuccess = true; + + $scope.errorMessage = response.data.error_message; + } + + } + function cantLoadInitialDatas(response) { + $scope.modsecLoading = true; + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = false; + $scope.installationFailed = true; + $scope.installationSuccess = true; + } + + + } + +}); + + /* Java script code for ModSec */ \ No newline at end of file diff --git a/firewall/templates/firewall/modSecurity.html b/firewall/templates/firewall/modSecurity.html index ce57a6ef3..b3da3dd9b 100644 --- a/firewall/templates/firewall/modSecurity.html +++ b/firewall/templates/firewall/modSecurity.html @@ -37,6 +37,7 @@
+

{% trans "Failed to start installation, Error message: " %} {$ errorMessage $}

diff --git a/firewall/templates/firewall/modSecurityRulesPacks.html b/firewall/templates/firewall/modSecurityRulesPacks.html new file mode 100644 index 000000000..5a4176f2e --- /dev/null +++ b/firewall/templates/firewall/modSecurityRulesPacks.html @@ -0,0 +1,113 @@ +{% extends "baseTemplate/index.html" %} +{% load i18n %} +{% block title %}{% trans "ModSecurity Rules Packs - CyberPanel" %}{% endblock %} +{% block content %} + +{% load static %} +{% get_current_language as LANGUAGE_CODE %} + + + +
+
+

{% trans "ModSecurity Rules Packages!" %}

+

{% trans "Install/Un-install ModSecurity rules packages." %}

+
+ +
+
+

+ {% trans "ModSecurity Rules Packages!" %} +

+ + {% if modSecInstalled == 0 %} +
+
+ +
+

{% trans "ModSecurity is not installed " %} + +

+
+
+
+ + + + {% else %} + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
PackageStatus
OWASP ModSecurity Core Rules + +
COMODO ModSecurity 3.0 + +
+ +
+ +
+ +
+

{% trans "Operation successful." %}

+
+ +
+

{% trans "Could not connect. Please refresh this page." %}

+
+ +
+

{% trans "Installation failed." %} {$ errorMessage $}

+
+ +
+

{% trans "Operation successful, refreshing page in 3 seconds.." %}

+
+
+ + + +
+
+ + {% endif %} +
+
+ + +
+ + +{% endblock %} \ No newline at end of file diff --git a/firewall/urls.py b/firewall/urls.py index 326eebb7d..2518da113 100644 --- a/firewall/urls.py +++ b/firewall/urls.py @@ -26,13 +26,17 @@ urlpatterns = [ ## ModSecurity url(r'^modSecurity', views.loadModSecurityHome, name='modSecurity'), - url(r'^installModSec', views.installModSec, name='installModSec'), - url(r'^installStatusModSec', views.installStatusModSec, name='installStatusModSec'), + url(r'^installModSec$', views.installModSec, name='installModSec'), + url(r'^installStatusModSec$', views.installStatusModSec, name='installStatusModSec'), url(r'^fetchModSecSettings', views.fetchModSecSettings, name='fetchModSecSettings'), url(r'^saveModSecConfigurations', views.saveModSecConfigurations, name='saveModSecConfigurations'), - url(r'^modSecRules', views.modSecRules, name='modSecRules'), + url(r'^modSecRules$', views.modSecRules, name='modSecRules'), url(r'^fetchModSecRules', views.fetchModSecRules, name='fetchModSecRules'), url(r'^saveModSecRules', views.saveModSecRules, name='saveModSecRules'), + url(r'^modSecRulesPacks', views.modSecRulesPacks, name='modSecRulesPacks'), + url(r'^getOWASPAndComodoStatus', views.getOWASPAndComodoStatus, name='getOWASPAndComodoStatus'), + url(r'^installModSecRulesPack', views.installModSecRulesPack, name='installModSecRulesPack'), + ] \ No newline at end of file diff --git a/firewall/views.py b/firewall/views.py index 21c98bff7..0bf63eece 100644 --- a/firewall/views.py +++ b/firewall/views.py @@ -1015,3 +1015,109 @@ def saveModSecRules(request): return HttpResponse(json_data) +def modSecRulesPacks(request): + try: + userID = request.session['userID'] + + admin = Administrator.objects.get(pk=userID) + + if admin.type == 3: + return HttpResponse("You don't have enough privileges to access this page.") + + modSecPath = os.path.join(virtualHostUtilities.Server_root,'modules','mod_security.so') + + modSecInstalled = 0 + + if os.path.exists(modSecPath): + modSecInstalled = 1 + + return render(request, 'firewall/modSecurityRulesPacks.html',{'modSecInstalled': modSecInstalled}) + + except KeyError: + return redirect(loadLoginPage) + +def getOWASPAndComodoStatus(request): + try: + userID = request.session['userID'] + + admin = Administrator.objects.get(pk=userID) + + if admin.type == 3: + final_dic = {'modSecInstalled': 0} + final_json = json.dumps(final_dic) + return HttpResponse(final_json) + + modSecPath = os.path.join(virtualHostUtilities.Server_root,'modules','mod_security.so') + confPath = os.path.join(virtualHostUtilities.Server_root, 'conf/httpd_config.conf') + + comodoInstalled = 0 + owaspInstalled = 0 + + if os.path.exists(modSecPath): + command = "sudo cat " + confPath + httpdConfig = subprocess.check_output(shlex.split(command)).splitlines() + + for items in httpdConfig: + + if items.find('modsec/comodo') > -1: + comodoInstalled = 1 + elif items.find('modsec/owasp') > -1: + owaspInstalled = 1 + + if owaspInstalled == 1 and comodoInstalled == 1: + break + + final_dic = { + 'modSecInstalled': 1, + 'owaspInstalled': owaspInstalled, + 'comodoInstalled': comodoInstalled + } + + final_json = json.dumps(final_dic) + return HttpResponse(final_json) + else: + final_dic = {'modSecInstalled': 0} + + final_json = json.dumps(final_dic) + return HttpResponse(final_json) + except KeyError: + return redirect(loadLoginPage) + +def installModSecRulesPack(request): + try: + val = request.session['userID'] + try: + if request.method == 'POST': + + data = json.loads(request.body) + + packName = data['packName'] + + execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/modSec.py" + + execPath = execPath + " " + packName + + output = subprocess.check_output(shlex.split(execPath)) + + if output.find("1,None") > -1: + installUtilities.reStartLiteSpeed() + data_ret = {'installStatus': 1, 'error_message': "None"} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + else: + data_ret = {'installStatus': 0, 'error_message': output} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + + except BaseException, msg: + data_ret = {'installStatus': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except KeyError, msg: + logging.CyberCPLogFileWriter.writeToFile(str(msg)) + data_ret = {'installStatus': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + diff --git a/install/install.py b/install/install.py index 06257d7d5..335461d9d 100644 --- a/install/install.py +++ b/install/install.py @@ -703,8 +703,8 @@ class preFlightsChecks: count = 0 while (1): - #command = "wget http://cyberpanel.net/CyberPanel.1.6.0.tar.gz" - command = "wget http://cyberpanel.net/CyberPanelTemp.tar.gz" + command = "wget http://cyberpanel.net/CyberPanel.1.6.1.tar.gz" + #command = "wget http://cyberpanel.net/CyberPanelTemp.tar.gz" res = subprocess.call(shlex.split(command)) if res == 1: @@ -723,8 +723,8 @@ class preFlightsChecks: count = 0 while(1): - #command = "tar zxf CyberPanel.1.6.0.tar.gz" - command = "tar zxf CyberPanelTemp.tar.gz" + command = "tar zxf CyberPanel.1.6.1.tar.gz" + #command = "tar zxf CyberPanelTemp.tar.gz" res = subprocess.call(shlex.split(command)) diff --git a/loginSystem/views.py b/loginSystem/views.py index ef15e0ccb..9242f5763 100644 --- a/loginSystem/views.py +++ b/loginSystem/views.py @@ -129,7 +129,7 @@ def loadLoginPage(request): firstName="Cyber",lastName="Panel") admin.save() - vers = version(currentVersion="1.6",build=0) + vers = version(currentVersion="1.6",build=1) vers.save() package = Package(admin=admin, packageName="Default", diskSpace=1000, diff --git a/plogical/backupUtilities.py b/plogical/backupUtilities.py index e820e65ac..ffa9faf65 100644 --- a/plogical/backupUtilities.py +++ b/plogical/backupUtilities.py @@ -294,6 +294,7 @@ class backupUtilities: status.write("Extracting web home data!") status.close() + # /home/backup/backup-example-06-50-03-Thu-Feb-2018/public_html.tar.gz tar = tarfile.open(pathToCompressedHome) tar.extractall(websiteHome) diff --git a/plogical/modSec.py b/plogical/modSec.py index e9a21b494..0849c98aa 100644 --- a/plogical/modSec.py +++ b/plogical/modSec.py @@ -4,10 +4,13 @@ import shlex import argparse from virtualHostUtilities import virtualHostUtilities import os +import tarfile +import shutil class modSec: installLogPath = "/home/cyberpanel/modSecInstallLog" tempRulesFile = "/home/cyberpanel/tempModSecRules" + mirrorPath = "mirror.cyberpanel.net" @staticmethod def installModSec(install, modSecInstall): @@ -73,8 +76,7 @@ modsecurity_rules_file /usr/local/lsws/conf/modsec/rules.conf rulesFilePath = os.path.join(virtualHostUtilities.Server_root,"conf/modsec/rules.conf") if not os.path.exists(rulesFilePath): - initialRules = """ -SecRule ARGS "\.\./" "t:normalisePathWin,id:99999,severity:4,msg:'Drive Access' ,log,auditlog,deny" + initialRules = """SecRule ARGS "\.\./" "t:normalisePathWin,id:99999,severity:4,msg:'Drive Access' ,log,auditlog,deny" """ rule = open(rulesFilePath,'a+') rule.write(initialRules) @@ -140,7 +142,6 @@ SecRule ARGS "\.\./" "t:normalisePathWin,id:99999,severity:4,msg:'Drive Access' @staticmethod def saveModSecRules(): try: - rulesFile = open(modSec.tempRulesFile,'r') data = rulesFile.read() rulesFile.close() @@ -162,6 +163,235 @@ SecRule ARGS "\.\./" "t:normalisePathWin,id:99999,severity:4,msg:'Drive Access' print "0," + str(msg) + @staticmethod + def setupComodoRules(): + try: + pathTOOWASPFolder = os.path.join(virtualHostUtilities.Server_root, "conf/modsec/comodo") + extractLocation = os.path.join(virtualHostUtilities.Server_root, "conf/modsec") + + if os.path.exists(pathTOOWASPFolder): + shutil.rmtree(pathTOOWASPFolder) + + if os.path.exists('comodo.tar.gz'): + os.remove('comodo.tar.gz') + + command = "wget https://" + modSec.mirrorPath + "/modsec/comodo.tar.gz" + result = subprocess.call(shlex.split(command)) + + if result == 1: + return 0 + + tar = tarfile.open('comodo.tar.gz') + tar.extractall(extractLocation) + tar.close() + + return 1 + + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile( + str(msg) + " [setupComodoRules]") + return 0 + + @staticmethod + def installComodo(): + try: + if modSec.setupComodoRules() == 0: + print '0, Unable to download Comodo Rules.' + return + + owaspRulesConf = """modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/modsecurity.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/00_Init_Initialization.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/01_Init_AppsInitialization.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/02_Global_Generic.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/03_Global_Agents.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/04_Global_Domains.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/05_Global_Backdoor.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/06_XSS_XSS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/07_Global_Other.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/08_Bruteforce_Bruteforce.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/09_HTTP_HTTP.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/10_HTTP_HTTPDoS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/11_HTTP_Protocol.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/12_HTTP_Request.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/13_Outgoing_FilterGen.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/14_Outgoing_FilterASP.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/15_Outgoing_FilterPHP.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/16_Outgoing_FilterSQL.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/17_Outgoing_FilterOther.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/18_Outgoing_FilterInFrame.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/19_Outgoing_FiltersEnd.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/20_PHP_PHPGen.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/21_SQL_SQLi.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/22_Apps_Joomla.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/23_Apps_JComponent.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/24_Apps_WordPress.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/25_Apps_WPPlugin.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/26_Apps_WHMCS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/27_Apps_Drupal.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/comodo/28_Apps_OtherApps.conf +""" + + confFile = os.path.join(virtualHostUtilities.Server_root, "conf/httpd_config.conf") + + confData = open(confFile).readlines() + + conf = open(confFile, 'w') + + for items in confData: + if items.find('/usr/local/lsws/conf/modsec/rules.conf') > -1: + conf.writelines(items) + conf.write(owaspRulesConf) + continue + else: + conf.writelines(items) + + conf.close() + + print "1,None" + return + + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile( + str(msg) + " [installOWASP]") + print "0," + str(msg) + + @staticmethod + def disableComodo(): + try: + + confFile = os.path.join(virtualHostUtilities.Server_root, "conf/httpd_config.conf") + confData = open(confFile).readlines() + conf = open(confFile, 'w') + + for items in confData: + if items.find('modsec/comodo') > -1: + continue + else: + conf.writelines(items) + + conf.close() + + print "1,None" + + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile( + str(msg) + " [disableComodo]") + print "0," + str(msg) + + @staticmethod + def setupOWASPRules(): + try: + pathTOOWASPFolder = os.path.join(virtualHostUtilities.Server_root, "conf/modsec/owasp") + extractLocation = os.path.join(virtualHostUtilities.Server_root, "conf/modsec") + + if os.path.exists(pathTOOWASPFolder): + shutil.rmtree(pathTOOWASPFolder) + + if os.path.exists('owasp.tar.gz'): + os.remove('owasp.tar.gz') + + command = "wget https://" + modSec.mirrorPath + "/modsec/owasp.tar.gz" + result = subprocess.call(shlex.split(command)) + + if result == 1: + return 0 + + tar = tarfile.open('owasp.tar.gz') + tar.extractall(extractLocation) + tar.close() + + return 1 + + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile( + str(msg) + " [setupOWASPRules]") + return 0 + + @staticmethod + def installOWASP(): + try: + if modSec.setupOWASPRules() == 0: + print '0, Unable to download OWASP Rules.' + return + + owaspRulesConf = """modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/modsecurity.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/crs-setup.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-901-INITIALIZATION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-905-COMMON-EXCEPTIONS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-910-IP-REPUTATION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-911-METHOD-ENFORCEMENT.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-912-DOS-PROTECTION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-913-SCANNER-DETECTION.conf +#modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-921-PROTOCOL-ATTACK.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/REQUEST-949-BLOCKING-EVALUATION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-950-DATA-LEAKAGES.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-959-BLOCKING-EVALUATION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-980-CORRELATION.conf +modsecurity_rules_file /usr/local/lsws/conf/modsec/owasp/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf +""" + + confFile = os.path.join(virtualHostUtilities.Server_root, "conf/httpd_config.conf") + + confData = open(confFile).readlines() + + conf = open(confFile, 'w') + + for items in confData: + if items.find('/usr/local/lsws/conf/modsec/rules.conf') > -1: + conf.writelines(items) + conf.write(owaspRulesConf) + continue + else: + conf.writelines(items) + + conf.close() + + print "1,None" + + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile( + str(msg) + " [installOWASP]") + print "0," + str(msg) + + @staticmethod + def disableOWASP(): + try: + + confFile = os.path.join(virtualHostUtilities.Server_root, "conf/httpd_config.conf") + confData = open(confFile).readlines() + conf = open(confFile, 'w') + + for items in confData: + if items.find('modsec/owasp') > -1: + continue + else: + conf.writelines(items) + + conf.close() + + print "1,None" + + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile( + str(msg) + " [disableOWASP]") + print "0," + str(msg) + + + + def main(): @@ -178,6 +408,18 @@ def main(): modSec.saveModSecConfigs(args.tempConfigPath) elif args.function == "saveModSecRules": modSec.saveModSecRules() + elif args.function == "setupOWASPRules": + modSec.setupOWASPRules() + elif args.function == "installOWASP": + modSec.installOWASP() + elif args.function == "disableOWASP": + modSec.disableOWASP() + elif args.function == "setupComodoRules": + modSec.setupComodoRules() + elif args.function == "installComodo": + modSec.installComodo() + elif args.function == "disableComodo": + modSec.disableComodo() if __name__ == "__main__": main() \ No newline at end of file diff --git a/static/firewall/firewall.js b/static/firewall/firewall.js index 73996960b..271af3a44 100644 --- a/static/firewall/firewall.js +++ b/static/firewall/firewall.js @@ -745,7 +745,7 @@ app.controller('secureSSHCTRL', function($scope,$http) { function ListInitialDatas(response) { - if(response.data.delete_status == 1){ + if(response.data.delete_status === 1){ $scope.secureSSHLoading = true; $scope.keyDeleted = false; populateCurrentKeys(); @@ -789,7 +789,7 @@ app.controller('secureSSHCTRL', function($scope,$http) { function ListInitialDatas(response) { - if(response.data.add_status == 1){ + if(response.data.add_status === 1){ $scope.secureSSHLoading = true; $scope.saveKeyBtn = true; $scope.showKeyBox = false; @@ -1236,4 +1236,185 @@ app.controller('modSecRules', function($scope, $http) { }); + +/* Java script code for ModSec */ + +app.controller('modSecRulesPack', function($scope, $http, $timeout, $window) { + + $scope.modsecLoading = true; + $scope.owaspDisable = true; + $scope.comodoDisable = true; + + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = true; + $scope.installationFailed = true; + $scope.installationSuccess = true; + + ///// ModSec configs + + var owaspInstalled = false; + var comodoInstalled = false; + var counterOWASP = 0; + var counterComodo = 0; + + + $('#owaspInstalled').change(function() { + counterOWASP = counterOWASP + 1; + owaspInstalled = $(this).prop('checked'); + + + if(counterOWASP > 2) { + if (owaspInstalled === true) { + installModSecRulesPack('installOWASP'); + } else { + installModSecRulesPack('disableOWASP') + } + } + }); + + $('#comodoInstalled').change(function() { + + counterComodo = counterComodo + 1; + comodoInstalled = $(this).prop('checked'); + + if(counterComodo > 2) { + + if (comodoInstalled === true) { + installModSecRulesPack('installComodo'); + } else { + installModSecRulesPack('disableComodo') + } + } + + }); + + + getOWASPAndComodoStatus(); + function getOWASPAndComodoStatus(){ + + $scope.modsecLoading = false; + + $('#owaspInstalled').bootstrapToggle('off'); + $('#comodoInstalled').bootstrapToggle('off'); + + url = "/firewall/getOWASPAndComodoStatus"; + + var data = {}; + + var config = { + headers : { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + + $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + $scope.modsecLoading = true; + + if(response.data.modSecInstalled === 1){ + + if (response.data.owaspInstalled === 1) { + $('#owaspInstalled').bootstrapToggle('on'); + $scope.owaspDisable = false; + }else{ + $('#owaspInstalled').bootstrapToggle('off'); + $scope.owaspDisable = true; + } + if (response.data.comodoInstalled === 1) { + $('#comodoInstalled').bootstrapToggle('on'); + $scope.comodoDisable = false; + }else{ + $('#comodoInstalled').bootstrapToggle('off'); + $scope.comodoDisable = true; + } + + } + + } + function cantLoadInitialDatas(response) { + $scope.modsecLoading = true; + } + + } + + ///// + + function installModSecRulesPack(packName) { + + $scope.modsecLoading = false; + + + + url = "/firewall/installModSecRulesPack"; + + var data = { + packName:packName + }; + + var config = { + headers : { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + + $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); + + + function ListInitialDatas(response) { + + $scope.modsecLoading = true; + + if(response.data.installStatus === 1){ + + $scope.modsecLoading = true; + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = true; + $scope.installationFailed = true; + $scope.installationSuccess = false; + + $timeout(function() { $window.location.reload(); }, 3000); + + }else{ + $scope.modsecLoading = true; + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = true; + $scope.installationFailed = false; + $scope.installationSuccess = true; + + $scope.errorMessage = response.data.error_message; + } + + } + function cantLoadInitialDatas(response) { + $scope.modsecLoading = true; + + // + + $scope.installationQuote = true; + $scope.couldNotConnect = false; + $scope.installationFailed = true; + $scope.installationSuccess = true; + } + + + } + +}); + + /* Java script code for ModSec */ \ No newline at end of file