Aplikacja w javie - szyfrowanie properties

Aplikacja w javie - szyfrowanie properties
0

Cześć

mam aplikacje w Javie i w properties w tej apliakcji mam kilka hasel, tak wprost wpisanych.

Mysle o ich zaszyfrowaniu i zeby podczas dzialania aplikacji automatycznie sie to deszyfrowalo i mowiac w skrocie dzialalo.

Znalazlem biblioteke Jasypt: http://www.jasypt.org/

Czy dzieki niej moge to osiagnac ? (mam malo czasu w iteracji, wiec pasuje zebym trafil z rozwiazaniem)

to chyba najprostsze rozwiazanie ?

0

Takie cos nie zapewni wiekszego bezpieczenstwa - ktos z dostepem do aplikacji moze latwo ja zdekompilowac i zobaczy jak jest szyfrowane itp. Poza tym, jasypt dziala tak (a przynajmniej jego czesc), ze musisz podac jakies haslo do odszyfrowania - gdzie bedzie lezej to haslo? W aplikacji? Gdzies poza nia? Jesli haslo do jasypt lezy poza aplikacja, to moze sobie daruj takie cuda i po prostu ten plik properties niech lezy poza aplikacja, i niech go strzega uprawnienia lokalnego systemu plikow? (zakladam ze plik nie bedzie lezal gdzies na serwerze www ;d)

0

tylko chyba aplikacja korzysta sama z tych danych z properties podczas dzialania

wiec nie moge ich przeniesc po za nia

w jaki sposob moge podac to haslo do deszyfrowania do jasypt, aby aplikacja pozostala bezpieczna ?

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
0

Najprostszym rozwiązaniem w takim przypadku jest klasyczne logowanie się do aplikacji. Użyszkodnik po uruchomieniu aplikacji jest proszony o podanie hasła. W wersji trochę bardziej rozbudowanej pierwsze uruchomienie wzbogacasz o ekran z konfiguracja properties i możliwością ustawienia hasła. Trochę to upierdliwe, ale w miarę proste.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0

no to logowanie juz jest

sugerujesz, ze pobranie aplikacji i dekompilacja w przypadku logowania przy wejsciu do aplikacji jest niemozliwa ?

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
0

jest możliwa, ale przynajmniej trzeba troszeczkę popracować. BTW jakie properties chcesz szyfrować? Dane do bazy?


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0
Koziołek napisał(a):

jest możliwa, ale przynajmniej trzeba troszeczkę popracować. BTW jakie properties chcesz szyfrować? Dane do bazy?

dokladnie, hasla do bazy

a co najlepsze one nigdy nie sa uzywane w kodzi, tylko w innych properties (xmle) np. od liquibase

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
0

A masz możliwość odpalenia na serwerze DB aplikacji w javie?


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0

nie

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Stacktrace
  • Postów:6822
0

a czegokolwiek poza db (PHP, PERL, jakieś programy wlasne w C)


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Freakman
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 7 lat
0

ja do tego swojego czasu uzywalem Jasypta własnie... tylko problemem jest, że tak naprawdę to nie jest jakiś tam super bezpieczny hash - aplikacja odhashowuje hasła używając ciągu zapisanego np w zmiennej środowiskowej. Lepszy rydz niż nic, ale i tak średnio bezpieczne jest to rozwiązanie.

Ciekawy temat, zawsze mówi się że plain text to zło, jednak nie łatwo znaleźć jakieś sensowne rozwiązanie ( jeśli chodzi o hasła do db w propertisach).


play hard..go pro.
0

Sensowne rozwiazanie to jest wlasnie polozenie pliku z takimi danymi gdzies w systemie plikow i liczenie na to ze uprawnienia systemu plikow sie z tym uporaja. Sprawa wyglada tak: jak masz taki plik (nawet zaszyfrowany) w aplikacji, to jak ktos ja zlapie i bedzie chcial to ja zlamie. Widzac te znaczniki {enc} czy co tam jasypt dodaje juz wiem gdzie sie zwrocic. Wiadomo, jest to lepsze niz plain text ale nie daje praktycznie zadnego dodatkowego zabezpieczenia.
Jak plik lezy sobie w systemie plikow i nie jest serwowany przez www to musisz miec dostep do tego serwera aby ten plik znalezc i uprawnienia aby moc go czytac. Aplikacja dziala jako jakis user (mam nadzieje nie root, ale np. tomcat) i tylko ten user moze czytac taki plik, nikt inny. Jesli mozesz czytac ten plik to znaczy ze jestes userem ktory ma do tego prawa (jakis admin) lub mozesz sie w takiego usera zmienic (sudo - wtedy musisz miec znowu uprawnienia); inaczej po prostu nie ma bata zeby przeczytac*. Jak atakujacy ma dostep do systemu, np. przez ssh, to moze i tak nie moc czytac tego pliku i sie nie dowie co w nim jest i jest git - uprawnienia. Jesli cos jest zaszyfrowane za pomoca jasypt, to zwykly ps -ef | grep java pokaze jakie jest haslo jasypta bo (przynajmniej u nas) jest to properties (-DjasyptPass=dupa cyz cos takiego) przy wywolaniu javy.

  • Jak atakujacy ma fizyczny dostep do maszyny to jest po ptakach, zaden jasypt nie pomoze ani zadne uprawnienia itp., moze zrobic co mu sie podoba - chyba ze system plikow jest zaszyfrowany...
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:minuta
0

Moim zdaniem po pierwsze powinnaś wyraźnie napisać co to za hasła, do czego służą, co zabezpieczają.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
0

korzystam jednak z jasypt, ale mi to w ogole nie dziala... integruje ze springiem:

Kopiuj


    <bean id="environmentVariablesConfiguration"

          class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">

        <property name="algorithm" value="PBEWithMD5AndDES" />

        <property name="password" value="ALA" />  //tak na razie :P

    </bean>

 

    <bean id="configurationEncryptor"

          class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">

        <property name="config" ref="environmentVariablesConfiguration" />

    </bean>

 

    <bean id="propertyConfigurer"

          class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">

        <constructor-arg ref="configurationEncryptor" />

        <property name="locations">

            <list>

                <value>classpath:conf/main.properties</value>

                <value>classpath:conf/addition.properties</value>

            </list>

        </property>

    </bean>

 

   <bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">

        <property name="locations">

            <list>

                <value>classpath:conf/main.properties</value>

                <value>classpath:conf/addition.properties</value>

            </list>

        </property>

    </bean>

 

</beans>


zaszyfrowalem recznie w konsoli wszystkie hasla i wprowadzilem do properties z odpowiednm prefiksem.

Rozumiem, ze odwolania do hasel z innych properties, jasypt zalatwi automatycznie ?

W jednej klasie potrzebuje hasel, to wstrzykuje sobie - propertyConfigurer (na bank porpawnie wstrzyknelo) i mam wrazenie ze raz dziala, a raz nie...

czy o czyms zapomnialem ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.