admin

 

oc

 

 

Če ste pozabili OwnCloud root geslo in nimate nastavljene e-pošte za reset, uporabite naslednji postopek.

Pogoj je da poznate vsaj en drug račun in geslo za prijavo.

 

Preko SSH-ja se prijavite na strežnik.

Sqlite baza se nahaja v direktoriju /var/www/owncloud/data/owncloud.db

 

1.) Prijavite se v SQLite bazo:

sqlite3 owncloud.db

*če nimate sqlite3, ga namestite z ukazom “apt-get install sqlite3”

 

2.) Preglejte vse uporabnike v bazi:

select * from co_users;

 

rezultat poizvedbe:

 

uporabnik01||$2a$08$xWY6wsHBOAC865EdogcWwOZD.SEK8GjYicL4U5VzoxAXpCEe  (geslo za tega uporabnika poznamo)

root||$2a$08$xWY6wsHBXXX65EdogcWwOZD.SEAAAYicL4U5VzfgchiCEe

 

3.) Z ukazom vnesete hash geslo iz enege računa v drugega.

 

update oc_users set password = ‘$2a$08$NRxmmH2t7x9GGeBUHElF.uSMEABCDlU8AhiTGjaSXu3Xj8BcDQXa2′ where uid =’root’;

 

 

4.) Sedaj ima root uporabnik isto geslo kot uporabnik01 :)

 

* Za izhod iz baze vneseite ukaz:

.exit

V primeru, da ste pozabili geslo za dostop do vašega računalnika, lahko uporabite naslednji trik za zamenjavo gesla.

* Cilj je zamenjati imena datotek Utilman.exe in Cmd.exe, tako da ob ponovnem zagonu, namesto pripomočka za prijavo zaženemo cmd kozolo, prek katere lahko nato z ukazom “net user uporabnik password”, zamenjamo geslo.

 

1.) Iz interneta prenesete katero koli Linux live boot verzijo in jo zapečete na DVD.

– http://www.kali.org/downloads/      (Kali Linux)

http://www.debian.org/CD/http-ftp/#stable (Debian)

https://www.ubuntu.si/povezave/  (Ubuntu)

 

2.) Ob zagonu računalnika pritisnite tipko “F2” oz. “Del” (nastavitve Biosa). Tukaj nastavite “First Boot device –> CD-ROM”.

w7pass

w7pass02

 

2.)  Zaženemo DVD in sedaj se vam odpre vmesnik live boot sistema (v tem primeru je to Kali Linux).

w7pass03

3.) Opdremo “terminalno” okno in z ukazom “fdisk -l” preverimo, katere diske imamo na voljo.

w7pass04

4.) Z ukazom “mkdir /mnt/mojdisk”, kreiramo nov direktorij, v katerega bomo montirali naš disk .

w7pass05

5.)  Montiramo disk z ukazom “mount -t ntfs /dev/sda1/ /mnt/mojdisk/”

w7pass06

6.) Postavimo se v direktorij “/mnt/mojdisk/Windows/System32/” in preimenujemo datoteko “Utilman.exe” v “Utilman.exe.old” in nato še “cmd.exe” v “Utilman.exe”. Nato z ukazom “reboot” ponovno zaženemo računalnik.

w7pass10

 

7.) Po ponovnem zagonu kliknemo na ikono “Utilman” levo spodaj in sedaj se nam odpre cmd kozola.

– Z ukazom “whoami” preverimo naše pravice.

– Z ukazom “net user” vidimo vse uporabnike računalnika.

– Z ukazom “net user uporabniškoime novogeslo” nastavimo novo geslo.

w7pass11

 

Geslo je sedaj zamenjano. Ne pozabite popraviti imena datotek na taka, kot so bila prej.

Secure File Transfer Protocol – SFTP

 

Če želimo omogočiti SFTP dostop in preprečiti SSH dostop, ter onemogočiti uporabniku dostop do drugih direktorijev, lahko to naredimo z naslednjimi koraki:

1.) Kreiramo direktorij, do katerega bo uporabnik imel dostop

1
2
3
4
cd /home
mkdir sftpdir
cd sftpdir
mkdir sftp1

2.) Kreiramo novo grupo in uporabnika

5
groupadd sftpgroup

*uporabnika dodamo skupini z “-G” in mu nastavimo home direktorij “-d” , en nivo nižje od njegovega (sftp1)

6
useradd -G sftpgroup -d /home/sftpmapa sftpuser

*uporabniku določimo geslo

7
passwd sftpuser

3.) Popravimo lastništvo sftp1 direktorija tako, da bo owner root in group sftpgroup.

8
chown root:sftpgroup /home/sftpdir/sftp1

4.) Odpremo konfiguracijsko datoteko “/etc/ssh/sshd_config” in dodamo naslednje parametre.
………………………………………………………………………..
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /home/sftpmapa
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

# Set this to ‘yes’ to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of “PermitRootLogin without-password”.
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to ‘no’.
#UsePAM yes
…………………………………………………………………………………………….

5.) Omogočimo uporabniku dostop le do SFTP-ja in nič drugega.

9
usermod -s "/usr/libexec/openssh/sftp-server" sftpuser

6.) Za zakjuček resetiramo ssh servis z ukazom:

10
service ssh restart

*Tako, sedaj lahko uporabnik dostopa le do svojega direktorija in ne more nižje.

sftp

Wireshark

 

Povezava : http://www.wireshark.org/

 

Pogosto v omrežju potrebujemo orodje s katerim želimo zajemati promet in analizirati podatke, zato potrebujemo programe vrste “sniffer”. To je aplikacija, ki posluša promet na mrežni karticah in nam ga posreduje preko vmesnika. Podatke lahko sortiramo, filtriramo…

Poslušanje prometa začnemo tako, da prvo izberemo omrežno kartico oz. “interface”.

ws01

WireShark vam prikaže ves promet na vaši omrežni kartici. Sedaj imate možnost pregledati vsak paket posebaj.

ws02

 

Kratka razlaga nekaterih paketov, ki se ponavadi prisotni v omrežju:

– ARP ( Authentication request protocol) je osnova za komunikacijo v LAN omrežjih.  Veliko število ARP zahtev je opozorilo o nedovoljenih aktivnostih na vašem LAN-u (skeniranje, virus…).Primer skeniranja celotne mreže z orodjem ZenMap.

ws04

 

– ICMP (Internet Control Message Protocol) echo request,echo replay,timestamp. Za primer lahko na ta način preverimo ali računalnik v omrežju živ.  Veliko število ICMP zahtev je lahko znak skeniranja vašega omrežja ali pa DDOS napada. Ker pa ima večina operacijskih sistemov zaprt port 7  in ne odgovarja na zahteve “echo requests”, se ICMP skoraj več ne uporablja za skeniranje.

*Window in Linux ukaz za preverjanje je : “ping 192.168.50.1”. Primer ICMP prometa:

ws03

 – NBNS (NetBIOS Name Service) podobno kot DNS pretvarja imena v IP-je. Protokol se v Windows okolju imenuje WINS ( Windows Internet Name Service), ki skrbi za določanje IP-jev računalnikom v omrežju na podlagi imena.

ws05

– DNS (Domain Name Server). Vsakič, ko v brskalnik vpišete ime določene strani, se pošlje DNS zahteva, ki vašemu računalniku posreduje IP naslov strežnika, katerega ste zahtevali.

ws06

– HTTP ( HyperText Transfer Protocol) deluje na aplikativnem novoju. Je osnova za podatkovno komunikacijo v WWW.

ws07

 

Poleg prikazanih sta še najbolj pogosta TCP in UDP protokola, ki sta odgovorna za prenos podatkov direktno med napravami. UDP se sicer bolj uporablja pri VoIP, streamingu, IPTV ( pošiljanje brez potrditve).

 

Primeri filtriranja:

-Filtriramo samo po PI naslovu:

ip.addr == 192.168.50.1

-Filtriranje po portu:

tcp.port eq 25

– Filtriranje po protokolu:

http

-Filtiranaje z uporabo OR (ali):

http || tcp

-Filtiranaje z uporabo AND (in):

http&&ip.src==192.168.50.143

 

Več v naslednjih prispevkih…

 

 

 

 

 

 

Tokrat vam bom predstavil, kako lahko z AppSec analizirate APK aplikacijo. Za test bom izbral preprost program za prižiganje in ugašanje led lučke.

V Eclipsu izgleda source takole:

reverse02

 

Na AppSec zaženemo “AppUse Dashboard”. Nato kliknemo “Load APK” (v našem primeru je to LedLight.apk).

reverse01

 

Sedaj izberemo meni “Reversing” in nato možnost “Extract APK Content”.

reverse03

 

Vsebina je razširjena v direktorij:

reverse05

reverse04

Sedaj moramo samo še zagnati “Launch JD-GUI”.

reverse06

Source koda iz naše aplikacje LedLigt.apk

reverse07

Če odpremo datoteko AndroidManifest.xml, lahko vidimo tudi pravice, ki jih aplikacija potrebuje za delovanje.

reverse08

Tako…sedaj si lahko ogledate logiko programa in tako lažje napišete svojega 😉

– VIDEO PRIKAZ

 

Primer Java kode za ping skeniranje vseh mašin v LAN-u. Koda bo sestavljena iz dveh razredov (PingLan, MojThread). Program lahko napišemo tudi brez “threadov”, vendar je potem zadeva dosti bolj počasna.

Class pingLan:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
 
public class pingLan {
 
	/**
	 * author: damir mesic 
         * http://izascita.si
	 */
	public static void main(String[] args) throws InterruptedException {
 
		try {
			String subnet = "192.168.50.0"; //naš subnet // our subnet
			InetAddress inet1 = InetAddress.getByName(subnet);
		        byte[] bytes = inet1.getAddress();  //IP prenesemo v byte array // add IP to byte array
 
		        // while zanka, koda se izvrši 254-krat  //while loop, code executes 254 times
			while((bytes[3]& 0xFF) < 255){
 
			bytes[3]++; // za vsak loop povečamo vrednost za ena //increase value for one each loop
		        String lan = (bytes[0]& 0xFF)+"."+(bytes[1]& 0xFF)+"."+(bytes[2]& 0xFF)+"."+(bytes[3]& 0xFF);		
		    // začnemo naš thread // start thread
		    Runnable task = new MojThread(lan);
		    Thread worker = new Thread(task);
		    worker.sleep(20); //sleep time nastavljen na 20ms, drugače CPU porabi preveč resorsov //sleep time 20ms,  otherwise CPU is overloaded
		    worker.start();
 
			}						
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
}

*Del kode se napačno prikaže v zgornjem oknu. Pravilen zapis je na tej sliki:

kodaslika

Class MojThread:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class MojThread implements Runnable {
 
         /**
	 * author: damir mesic 
         * http://izascita.si
	 */
 
	private String lan;
 
	MojThread(String lan){
		this.lan = lan;	
	}
 
	@Override
	public void run() {
 
	    Runtime rt = Runtime.getRuntime();
	    Process process = null;
		try {
			process = rt.exec("ping -n 1 -w 50 "+lan); // (-n) stevilo posalnih echo zahtev (-w) je max timeout  //(-n) number of send echo requests, (-w) max timeout
 		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
 
    // read the output from the command // preberi izhod ukaza
    String s;
	try {
		while ((s = stdInput.readLine()) != null)
		{
			if (s.equals("Request timed out.")){
				System.out.println(lan+"  NO PING");
			} else if (s.contains("Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),")){
				System.out.println(lan+ "PING OK");
			}
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}				
	}
}

Rezultat:
javaoutput

 

Rezultat ni v vrstnem redu, ker se nekateri threadi končajo prej, kot drugi.

Javno dostopne WIFI točke (lokali, saloni…) imajo dostikrat nezavarovane dostope, ker želijo strankam olajšati dostop do internetnih vsebin, vendar s tem v resnici resno ogrožajo vašo zasebnost in hkrati omogočijo krajo gesel in ostalih občutljivih podatkov na dokaj lahek način.

WIFI 802.11a/b/g/n v osnovi deluje kot HUB v LAN omrežjih. V primeru, da mrežno kartico postavimo v “promiscuos mode”, kar pomeni, da bo poslušala ves promet, tudi tisti, ki ni namenjen njej. Pogoj je, da ste priključeni na dostopno točko (AP).
Linux omogoča (odvisno od gonilnikov) postavitev kartice v “monitor mode”, kar pomeni, da lahko poslušamo “raw” pakete, tudi če nismo priključeni na dostopno točko.

 

Načini prestrezanja podatkov so odvisni od vrste zaščite (brez, WEP,WPA,WPA2):

Težavnost prestrezanja narašča z vrsto kriptiranja.

1.) WEP kriptiranje. WEP ključ je dokaj enostavno pridobiti, zaradi pomanjkljivosti v protokolu (cca 15min).
Če pa ključ že imate, lahko dejansko prisluškujete vsemu prometu na omrežju.

MIMT2
2.) WPA/WPA2 kriptiranje. Tukaj je postopek malo težji, saj vam poznavanje ključa ne omogoča popolne dekripcije podatkov.
Z uporabo “ARP poisoning” in “MAN IN THE MIDDLE” napada pa lahko podatkovni tok preusmerimo preko nas in tako dostopamo do informacij.
Krekanje ključa z “bruteforce” poskusi je praktično nemogoče (če je geslo dovolj dolgo).

*ARP poisoning pomeni, da se v omrežju predstavljamo kot druga naprava. Vse naprave v lokalnem omrežju z uporabo ARP-a(IP naslov pretvorimo v MAC naslov) za komunikacijo
z drugimi napravami uporabljajo MAC naslove. Naprava A, ki želi komunicirati z napravo B, v omrežje pošlje ARP zahtevo (katera naprava uporablja ta IP naslov). Naprava B (ima IP naslov, ki ga pošilja
naprava A) tako odgovori z svojim MAC naslovom, kar pomeni, da se lahko začne komunikacija preko IP-ja.

MIMT

3.) Prisluškovanje se lahko še veliko lažje vrši na mrežni strani WIFI točke, kjer promet več ni začiten z WEP,WPA/WPA2 kripcijo.

MIMT5

4.) Napadalec postavi svojo WIFI dostopno točko in tako prestreza ves promet.

MIMT1

Kateri podatki so nezaščiteni na internetu?
Nezaščiteni so vsi podatki, ki ne uporabljajo varnostnih protokolov, kot so HTTPS,SFTP,SSH…
Nezaščiteni podatki pomeni, da se informacija pošilja v “plain text” obliki. Protokoli so HTTP Basic Authentication ,FTP,Telnet,SMTP…

Programi za prestrezanje podatkov?
Za prestrezanje imate na voljo aplikacije, kot so Wireshark, TcpDump, WinDump…
Velikokrat se taki programi uporabljajo pri sistemski administraciji, za ugotavljanje napak na omrežju,spremljanje prometa…

Kako se izognemo prestrezanju podatkov?

Za dostop do interneta uporabljajte VPN tunele, gesla vnašajte le na strani, ki imajo HTTPS zaščito (ker napadalec težko dobi pravi CA, vas bo brskalnik opozoril, da certifikat ni vreden zaupanja).

Izključite avtomatsko prijavo na strani, ko uporabljate omrežje, ki ni vredno zaupanja.

Na voljo imate tudi aplikacije, kot so ARPWatch za zaznavanje sprememb MAC naslovov, ter Sentinel za zaznavanje kartic v “promiscuos mode”.
Uporabljajte statične ARP tabele za kritične strežnike in naprave.

 

phpconfig
PHP koda za povezavo na bazo je v osnovi taka:

1
2
3
4
5
6
7
8
9
10
11
//ime datoteke je index.php    
// shranjena v /var/www/     
define ('HOST','localhost');     
define ("USER",'root');     
define ('PASSWORD','geslo_moje_baze');     
define('DATABASE','ime_moje_baze');   
$povezava = mysqli_connect(HOST,USER,PASSWORD,DATABASE);     
if ( !$povezava) {     
die('Povezava neuspesna');     
}    
echo 'Povezani!';

Ker pa želimo zavarovati geslo, uporabniško ime in ostale podatke, zadevo rešimo tako, da parametre shranimo v drugo datoteko, ki pa ne sme biti v “/var/www/” direktoriju, saj je ta dostopen iz interneta. Za naš primer bomo kreirali direktorij en nivo nižje in sicer v “/var/myconf/”. Ime datoteke bo “config.php”.

1
2
3
4
5
6
7
8
9
10
11
// ime datoteke config.php
//pot datoteke /var/moyconf/config.php
define ('HOST','localhost');  
define ("USER",'root');  
define ('PASSWORD','gesl_moje_baze');  
define('DATABASE','ime_moje_baze'); 
$povezava = mysqli_connect(HOST,USER,PASSWORD,DATABASE);  
if (!$povezava){   
die('Povezava neuspesna!');  
}  
echo 'Povezava OK';

Sedaj pa še popravimo naš “index.php” tako, da bo vrnil rezultat iz “config.php” (pokličemo jo z ukazom “include(‘/pot/ime_datoteke’);”

1
2
3
4
5
//
// ime datoteke index.php
//pot datoteke /var/www/index.php
include('/var/moyconf/config.php'); 
//

Tako…sedaj nam index.php vzpostavi povezavo z bazo, brez da bi ogrozili vaše geslo.
f4

V UNIX-based sistemih je CLASSPATH  spremenljivka, ki vsebuje listo direktorijev, v katere gleda operacijski sistem, ko potrebuje določene knjižnice in module.

V našem primeru koda potrebuje mysql-connector-java.jar knjižnice.

Če želimo,da bo naša koda delovala mora Java poznati pot do te knjižnice. To pa nastavimo v CLASSPATH .

Sintaksa za nastavitev poti je odvisna tudi od “shella”, ki ga uporabljate.

Če želite preveriti katero vrsto uporabljate vtipkajte ukaz “finger uporabniškoime”, kjer je uporabniškoime ime, ki ga uporabljate za prijavo.

fr01

 

Knjižnice so shranjene v direktoriju “/var/share/java/…”

fr02

 

Če želimo, da se poti nastavijo ob vsaki prijavi, dodamo naslednji zapis v datoteko “/root/.bashrc” oz. v profil s katerim boste pognal aplikacijo.

f3

Za konec restartamo konzolo ali pa odpremo novo z ukazom “bash”.

Pot lahko sedaj preverimo z ukazom ” echo $CLASSPATH”

 

 

 

 

 

IPTABLES

Iptables je aplikacija za konfiguracijo tabel Linux Kernel požarnega zidu.

Osnovni ukazi:

iptables -L (izpiše trenutna pravila požarnega zidu)

-A ( dodaj pravilo v “rule chain”. Rule chains se delijo na INPUT, FORWARD,  OUTPUT)

-m conntrack ( pravilo deluje na podlagi stanja povezave)

–cstate (definiraj listo stanj za pravila. Možne so naslednje možnosti:

1. NEW – Povezava še ni bila vzpostavljena

2. RELATED – Povezava je nova, vendar je vezana na povezavo, ki je že vzpostavljena.

3.ESTABLISHED – Povezava je vzpostavljena

4. INVALID – Prometa ni bilo možno identificirati.

-m limit ( Pravilo velja le za čas, ki smo ga navedli)

-l limit ( Največji možen čas pravila)

-p ( vrsta protokola )

–dport ( “destination port”, vhodne povezave filtriramo po vhodnih vratih)

-j (“jump”, pošlji paket na določeno tarčo. Iptables ima privzeto štiri vrste tarč:

1. ACCEPT (sprejmi paket)

2. REJECT (zavrnemo paket in vrnemo “reject” pošiljatelju)

3.DROP ( zavrzi paket in ne pošlji odgovora pošiljatelju)

4.LOG ( zabeleži paket in nadaljuj pregled pravil)

–log-prefix ( dodaj tekst pred vpisom v dnevnik)

–log-level ( sistemski dnevnik ima več nivojev zapisa (podrobnost podatkov))

-i (pravilo velja le, če paket pride na pravo mrežno kartico)

-v (prikaži več informacij ob vstopu paketa)

-s –source (IP naslov[/maska] pošiljatelja)

-d –destination (IP naslov[/maska] prejemnika)

-o –out-interface (ime outputa + ime kartice)

Primeri:

1. Stanje iptables pred urejanjem (privzete nastavitve)

2. Odprimo port za spletni strežnik (port 80) in SSH dostop.

iptables -A INPUT -p tcp –dport 80 -j ACCEPT

iptables -A INPUT -p tcp –dport 22 -j ACCEPT (to pomeni, da bo odprt privzeti port 22 za SSH. Če ga imate na drugem portu vnesti številko porta namesto SSH)

Sedaj imamo odprta WWW in SSH porta. Če želimo ostale povezave onemogočiti vnesemo naslednje pravilo:

iptables -A INUPUT -j DROP

Stanje Iptables po pisanju pravil:

Če želimo dodati novo pravilo recimo za “loopback” povezave, ga moramo dati pred “DROP all — anywhere”, ker bodo vse povezave po tem pravilu zavržene.

iptables -I INPUT 1 -i lo -j ACCEPT

Z ukazom “iptables -L -v” dobimo bolj podrobne informacije o paketih.

V PRIMERU PONOVNEGA ZAGONA RAČUNALNIKA BODO VSE NASTAVITVE IZIGINILE. Če želite nastavitve shraniti trajno vnesite ukaz

“/etc/init.d/iptables save”

Internetna zaščita

Copyright © 2013. All Rights Reserved.